正在啃《JavaScript权威指南》,随手记一些重要的东西。
3.6 包装对象
var s = "test";
s.len = 4; //给s设置一个属性
var t = s.len; //查询这个属性
t返回的结果是undefined。原因在于,执行第二行代码时创建了一个临时字符串对象,s.len属性的设置是在其上的,这行代码执行完毕后临时对象就销毁,原来的s没有变,自然也无法查到s.len这个属性。
//原始值和包装对象的差异
var n = 2;
var N = new Number(n);
typeof(n);
typeof(N);
n == N;
n === N;
3.7 不可变的原始值和可变的对象引用
var s = "hello";
s.toUpperCase();//返回一个新的字符串"HELLO",但没有改变s的值
s
原始值的比较是值的比较,对象的比较是引用的比较。
两个对象就算包含同样的属性和相同的值,仍然不相等。
3.8 类型转换
[2]+1;
[9] == 9;
[] == 1;
5 == true;//这行代码的结果让我有点意外
1 == true;
Boolean(5);
Object(3);