「前端基础」JS对象部分

1 定义

对象就是一组“键值对”(key-value)的集合,是一种无序的复合数据集合。

  • 键名又称为属性或属性名(property)
  • 键值又称为属性值(value)
//常用写法
let obj = {
   'name': 'zxc', 'age': 23}

//规范写法
let obj2 = new Object({
   'name': 'zxc', 'age': 23})

2 键名

对象的所有键名都是字符串(ES6 又引入了 Symbol 值也可以作为键名),不是标识符, 可以包含任意字符。引号可省略,省略之后就只能写标识符和纯数字,就算引号省略了, 键名还是字符串。

  1. 如果键名是数值,会被自动转为字符串。
  2. 如果键名不符合标识符的条件(比如第一个字符为数字,或者含有空格或运算符),且也不是数字,则必须加上引号,否则会报错。
  3. 如果一个属性值为函数,通常把这个属性称为“方法”。
  4. 如果属性值还是一个对象,就形成了链式引用。

对象的属性之间用逗号分隔,最后一个属性后面可以加逗号(trailing comma),也可以不加。

属性可以动态创建,不必在对象声明时就指定。

ES6

对象定义时,需要变量作为属性名,属性值需要用[]来包裹住。

let name = 'age'
let info = {
   
	[name] = 18
}
info // {age: 18}

由来:

let name = 'age'
let info = {
   }
info[name] = '18'
info // {age: 18}

ES6之前,对象定义完后,变量可以作为属性名,来动态定义属性。因此借鉴这部分用[]方式。

1.4 表达式还是语句?

对象采用大括号表示,这导致了一个问题:如果行首是一个大括号,它到底是表达式还是语句?

{
    foo: 123 }

JavaScript 引擎读到上面这行代码,会发现可能有两种含义。

第一种可能是,这是一个表达式,表示一个包含foo属性的对象;

第二种可能是,这是一个语句,表示一个代码块,里面有一个标签foo,指向表达式123

疑问: chrome直接输出{ foo: 123 }, 是一个对象.
答: 因为 chrome 欺骗了我们, 用 firefox 可以验证下面这句话,JS是只花了10天就设计出来的语言。

为了避免这种歧义,JavaScript 引擎的做法是,如果遇到这种情况,无法确定是对象还是代码块,一律解释为代码块。

{
    console.log(123) } // 123

上面的语句是一个代码块,而且只有解释为代码块,才能执行。

如果要解释为对象,最好在大括号前加上圆括号。

因为圆括号的里面,只能是表达式,所以确保大括号只能解释为对象。

({
    foo: 123 }) // 正确
({
    console.log(
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值