试一试 :
<script>
var name = 10 ;
var obj = {
name : '小明',
2 : 10
}
console.log(obj.name);
console.log(obj['name']);
console.log(obj[name]);
</script>
-
对象的属性名
-
字符串 (name : '小明' 等同于 'name' : '小明')
-
默认是字符串,如果不是,会转为字符串
-
如果是值类型(布尔 单项数组 null undefined)都会默认转为字符串
- 单项数组的项如果是数字或者‘数字’ 会转换为数字,其他都会转为字符串
-
可以使用. 和 []
-
[]里是属性名 属性名是字符串, 如果里面是变量,那就找变量存储的值
-
变量没声明 xxx is not defines
-
变量的值不是obj的属性 undefined
-
-
-
数字
- 取数字属性名的属性值,只能使用[] 不能使用.
-
-
变量与值
console.log(obj[name]) ‘age’ 代表值 代表本深 age 代表变量,代表变量存储的值 此时obj[name变量代表的值],去obj里找以name存储的值为属性名的属性值 因此是找obj[10] => undefined -
结论
-
操作一个对象的属性只有两种方式 .属性名 ,[‘属性名’]
-
属性名只能是数字或字符串,不可能是变量
-
变量不代表自己,代表他存储的那个值
-
答案:
<script>
var name = 10 ;
var obj = {
name : '小明',
2 : 10
}
// 获取OBJ这个对象的NAME属性对应的值
console.log(obj.name); // => '小明'
// 获取OBJ这个对象的NAME属性对应的值
console.log(obj['name']);// => '小明'
console.log(obj[name]);// undefined
</script>
扩展
var name = 'mike' ;
var obj = {
// 属性名:属性值(放变量也是把变量存储的值拿过来做属性值)
name : name,
// 可以改写成
name,
}
//相当于 name : 'mike'
着ES6中,当对象的属性名和属性值(变量)一模一样('val' : val)时,可以改写成只有属性名