11. js object对象

212 阅读2分钟

11.1 属性名引号

  • 属性名的引号最好不要省略, 如果省略有两个问题:

    • 命名规范需要遵循标识符的命名规范

      >var obj = {2g:"344"} //VM500:1 Uncaught SyntaxError: Invalid or unexpected token
      >var obj = {2:"344"} //这个是可行
      
    • 科学记数法会自动转换

      var obj = {1e3:"45"} //obj {1000: "45"}
      var obj = {.234:"45"} //obj {0.234: "45"}
      var obj = {0xFF:"45"} //obj {255: "45"}
      
  • 属性名不管有没有引号, 但是一定会转化成字符串, 空字符''都可以

  • 想用变量做属性名的话用: []:var obj={[name]:"45"} // {galen: "45"}

11.2 读属性三种办法

共用三种办法obj.name obj['name'] obj[name], 前面两个的name是字符串, 而第三个是变量.

11.3 删除属性名key, 和删除属性值

  • delete:删除属性名和值,
  • 设置undefined值,可删除属性值
  • 可重复删除,不报错
  • 删除后可以用 'name' in obj, 判断是否删除成功

11.4 原型

原型是什么

原型就是共有属性.每个对象都有一个隐藏属性__proto__: 这个隐藏属性存着原型的地址#409, 而#409对象的原型地址为空,

如何查看自己的隐藏属性

console.dir(obj), 自身属性和公有的属性

可以修改原型吗?

可以随时修改原型的属性, 很脆弱

  • obj.tostring是无法修改原型的
  • obj.__proto__.tostring: 可以强行修改, 但是很危险

可以创建的时候指定原型吗?

创建指定原型: var obj= Object.create(common), common就是原型对象

可以批量修改属性值吗?

批量赋值: Object.assign(obj, {'name': galen, "haha": jakg})

  • delete:删除属性名和值,
  • 设置undefined值,可删除属性值
  • 可重复删除,不报错
  • 删除后可以用 'name' in obj, 判断是否删除成功

11.4 原型

原型是什么

原型就是共有属性.每个对象都有一个隐藏属性__proto__: 这个隐藏属性存着原型的地址#409, 而#409对象的原型地址为空,

如何查看自己的隐藏属性

console.dir(obj), 自身属性和公有的属性

可以修改原型吗?

可以随时修改原型的属性, 很脆弱

  • obj.tostring是无法修改原型的
  • obj.__proto__.tostring: 可以强行修改, 但是很危险

可以创建的时候指定原型吗?

创建指定原型: var obj= Object.create(common), common就是原型对象

可以批量修改属性值吗?

批量赋值: Object.assign(obj, {'name': galen, "haha": jakg})