对象包装类

# 对象包装类

# 对象的创建方法

  • 1、 对象字面量 var obj = {};
  • 2、 构造函数
    • 系统自带的构造函数 Object
    • 自定义(构造函数)

# 检查属性是否存在对象中

# in

可以使用in 操作符来检测属性是否存在于对象中。 格式为:prop in object 注意:如果属性是目标对象原型链中得属性,则也判定为存在于目标对象中。

var obj = {abc:1}
Object.setPrototypeOf(obj,{name:'zhang san'})
console.log('name' in obj) // true

# hasOwnProperty

hasOwnProperty 方法用来判断属性是否是目标对象的自身属性。 自身属性即为不包含对象原型链上的属性。

var obj = {name:'lucas'}
Object.setPrototypeOf(obj,{age:11})
obj.hasOwnProperty('name') // true
obj.hasOwnPerperty('age') // false

# propertyIsEnumerable

propertyIsEnumerable 方法同 hasOwnProperty 相同,但是更高级。propertyIsEnumerable 是判断是否为目标对象的可枚举属性

var obj = { name: 'zhang san' }
Object.defineProperty(obj, 'age', {
    value: 11,
    enumerable: false,
    writable: true,
    configurable: true
})

Object.propertyIsEnumerable('name') // true
Object.propertyIsEnumerable('age') // false

# 对象序列化

对象序列化是指将对象的状态转换为字符串,也可以反序列化,即将字符串转回成对象。 JSON.stringify 只能将对象中可枚举的自有属性序列化

var obj = { name: 'zhang san' }
Object.defineProperty(obj, 'age', {
    value: 11,
    enumerable: false,
    writable: true,
    configurable: true
})
Object.setPrototypeOf(obj, { hobbies: 'football' })
let obj_str = JSON.stringify(obj) // object -> string  序列化
let new_obj = JSON.parse(obj_str); // string -> object 反序列化
console.log(obj_str); // { name: 'zhang san' } 

如果使用JSON.stringify 函数来将对象序列化为字符串,对象中如果包含函数,将会被舍弃

JSON.stringify 与 JSON.parse 的规则

  • JSON 不支持 undefined。
  • 不支持函数
  • 除了 RegExp、Error对象 ,JSON 支持除这两个外其他的对象。
  • JSON.stringify 只能序列化可枚举的属性。
  • NaN、Infinity、-Infinity 序列化后的结果为 null。
  • 日期对象序列化的结果是ISO格式的字符串,但JSON.parse()依然保留它们字符串形态,并不会为其还原为日期对象

# 包装类

如 String、 Number、 Boolean。

let s = new String(‘abc’);
let n = new Number(12);
let b = new Boolean(true);

typeof s|n|b // 结果都是 object

包装类能够通过一些运算操作变回普通数据:

let s = new String(‘abc’);
s += 1;
// s -> abc1 变回字符串了 ,同理也发生在其他包装类上

假设有字符串 s ,然后我们为 s 添加属性 test 不会报错,但是也并没有什么作用。

let s = ‘abc’;
s.test = ‘bcd’; // undefined

原理是:当我们为字符串添加属性的时候内部会将字符串转为包装类,然后再删除这个属性

let s = ‘abc’
s.test = ‘bcd’;
// 相当于 new String(s).test = ‘bcd’; delete xxx;

charCodeAt(str) 返回 str 对应的 unicode 码值 小于等于 255 为 英文字母 大于255 为汉字