打印的结果是
而不是
{name:'1222'}
javascript
中有两种数据类型:
String
)、数值(Number
)、布尔值(Boolean
)、Undefined
、Null
Object
)、数组(Array
)、函数(Function
)在js
中一切皆为对象,基本类型原则意义上也是对象,基本类型可以像对象类型一样使用,通过obj.属性名
或者obj[属性名]
来访问、也可以通过obj.属性名=值
或者obj[属性名]=值
,来赋值(尽管实际上不起作用,但是形式上可以),所以语法上不会报错,但是不起作用。
至于你补充的问题,为什么一开始a
定义的一个对象,后面给它添加方法的时候又不起作用了?因为在第二步重新指定了a
的值,让它又等于了10
,此时又变成了Number
类型,所以下面添加name
方法的时候又无效了。
举个例子:
let a = 10;
a = new Object();
a.name = 'this is your name';
console.log(a); // 'this is your name'
a = 10
a.name = 'this is your name'
相当于
10.name = 'this is your name'
但是10作为一个数字、一个基本类型,是没有属性可以用“.”来点出来的。它就是一个值,没有属性
10 回答11.1k 阅读
6 回答3k 阅读
5 回答4.8k 阅读✓ 已解决
4 回答3.1k 阅读✓ 已解决
2 回答2.7k 阅读✓ 已解决
4 回答2.5k 阅读✓ 已解决
3 回答2.3k 阅读✓ 已解决
首先基本类型都是没有属性的,
像 var a = 10; var b = "abc";
你之所以可以访问 a.fixed方法, b.substr方法, 是因为JS引擎会把基本类型数据进行了一次包装, 比如 a 会包装 Number(a), b会包装成String(b), 这样就数字就能够使用fixed方法,字符串能够使用substr。
给数字和字符串添加属性是不会生效的, a.name ='this is your name' 其实是在给 Number(a)对象添加nane属性。
每次包装都会产生一个新的对象,新对象不存在name,因此访问a.name 返回 undefined。 console.log(a)就只是显示a的数值