Js Object一部分操作

/*
 * 这是一张 JavaScript 代码草稿纸。
 *
 * 输入一些 JavaScript,然后可点击右键或从“执行”菜单中选择:
 * 1. 运行 对选中的文本求值(eval) (Ctrl+R);
 * 2. 查看 对返回值使用对象查看器 (Ctrl+I);
 * 3. 显示 在选中内容后面以注释的形式插入返回的结果。 (Ctrl+L)
 */
Object.getOwnPropertyDescriptor
var person = [];
Object.defineProperty(person,'name',{
  writable:false,
  enumerable:true,
  configurable:false,
  value:'Bob'
});
person.name;
/*
Bob
*/

person.name=1;
/*
1
*/
person.name;//因为writable 为false;这里是不可写的
/*
Bob
*/
delete person.name;//这的的configurable为Ffalse 无法删除
/*
false
*/

Object.defineProperty(person,'type',{
  configurable:true,
  writable:true,
  enumerable:false,
  value:"Object"
});
Object.keys(person);//获取对象上的键 Object.keys;
/*
name
*/

Object.defineProperties(person,{
  title:{value:'world',enumerable:true},
  corp:{value:'BBBB',enumerable:true},
  salary:{value:5000,enumerable:true,writable:true}
});
Object.getOwnPropertyDescriptor(person,'salary');
/*
[object Object]
*/
Object.keys(person);
/*
name,title,corp,salary
*/

Object.defineProperties(person, {
    title : {value : 'fe', enumerable : true},
    corp : {value : 'BABA', enumerable : true},
    salary : {value : 50000, enumerable : true, writable : true},
    luck : {
        get : function() {
        return Math.random() > 0.5 ? 'good' : 'bad';
        }
    },
    promote : {
        set : function (level) {
            this.salary *= 1 + level * 0.1;
        }
    }
});

person.salary;



//对象标签 proto class extensible
var toString = Object.prototype.toString;
toString.call(null);
/*
//[object Null]
*/
function getType(o){return toString.call(o).slice(8,-1);};
getType(null);
/*
Null
*/
getType(undefined);
/*
Undefined
*/
getType(1);
/*
Number
*/
getType(new Number(1));//这里是对象
/*
Number
*/
typeof new Number(1);
/*
object
*/
getType(true);
/*
Boolean
*/
getType(new Boolean(true));//这里依然是对象
/*
Boolean
*/

//extensible标签
var obj = {x:1,y:2};
Object.isExtensible(obj);//默认是可以扩展的
/*
true
*/
Object.preventExtensions(obj);//阻止扩展
/*
[object Object]
*/
Object.isExtensible(obj);//这里显示不可以扩展
/*
false
*/
obj.z = 1;
obj.z
/*
undefined  add new property failed
*/
Object.getOwnPropertyDescriptor(obj,'x');//查看 x的属性 value:1,writable:true,enumerable:true,configable:true
/*
[object Object]  
*/

Object.seal(obj);
Object.getOwnPropertyDescriptor(obj,'x');//将 x的configurable设置为false
Object.isSeal(obj);

Object.freeze(obj);
Object.getOwnPropertyDescriptor(obj,'x');//将x的 writable 和configurable都设置为false
Object.isFrozen(obj);


//序列化、其他对象方法
var obj = {x:1,y:true,z:[1,2,3],nullVal:null};
JSON.stringify(obj);//将对象转换为JSON字符串
/*
{"x":1,"y":true,"z":[1,2,3],"nullVal":null}
*/

obj = {val:undefined,a:NaN,b:Infinity,c:new Date()};
JSON.stringify(obj);
/*
{"a":null,"b":null,"c":"2017-03-22T07:38:52.318Z"}//默认会忽略到 值为undefined的;NaN/Infinity 都为null,时间会转换为 当前的时格式
*/

obj = JSON.parse('{"x":1}');//将json字符串转换为 对象

//序列化 自定义
var obj ={
    x:1,
    y:2,
    z:{
        z1:1,
        z2:2,
        toJSON:function(){
            return this.z1 + this.z2;
        }
    }
};
JSON.stringify(obj);
/*
{"x":1,"y":2,"z":3}
*/


var obj = {x:1,y:2};
obj.toString();
obj.toString = function(){return this.x + this.y};
"Result" +obj;
/* 
Result3     +obj;//转化为 数字一元加号 数字类型
*/

obj.valueOf = function(){return this.x + this.y +100;};
//+obj;
"Result" + obj;
/*
Result103



最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容