【js致死点】对象

  • 对象的键名都是字符串,所以加不加引号都可以
    如果键名不符合标识名的条件(比如第一个字符为数字,或者含有空格或运算符),且也不是数字,则必须加上引号,否则会报错。
// 邪门命名法
var obj = {
  1: 'a',
  3.2: 'b',
  1e2: true,
  1e-2: true,
  .234: true,
  0xFF: true
};

  • 大括号默认是语句。要是对象的话请加()
({ foo: 123 }) // 正确
({ console.log(123) }) // 报错
  • 读取属性值
var foo = 'bar';

var obj = {
  foo: 1,
  bar: 2
};

obj.foo  // 1
obj[foo]  // 2

var obj = {
  123: 'hello world'
};

obj.123 // 报错
obj[123] // "hello world"
  • 删除属性 delete obj.key
    删除属性只能是对性本身的, 删除继承的会报错
var obj = Object.defineProperty({}, 'p', {
  value: 123,
  configurable: false
});

obj.p // 123
delete obj.p // false
  • 判断对象有什么键 in vs hasOwnProperty
    in 是对象含有的, hasOwnProperty 是自身的
var obj = { p: 1 };
'p' in obj // true
'toString' in obj // true
if ('toString' in obj) {
  console.log(obj.hasOwnProperty('toString')) // false
}
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容