js学习笔记64——包装类
js为我们提供了三个包装类,通过这三个包装类可以将基本数据类型的数据转换为对象。
这三个分别是:String()、Number()、Boolean()。
它们将数据转换为相应的对象。
<script>
var num = new Number(3);
console.log(typeof num);
</script>
现在变成了对象,就俺家可以给num添加属性。
<script>
var num = new Number(3);
num.hello = "你好";
console.log(num.hello);
var num2 = 3;
num2.hello = "你好";
console.log(num2.hello);
</script>
可以看到,基本数据类型虽然也可以添加属性,但是是undefined。
看看基本数据类型和基本数据类型对象是否相等。
<script>
var num = new Number(3);
var num2 = 3;
console.log(num2===num);
console.log(num2==num);
</script>
从上图可以看到相等,但不全等。
所以通常不使用基本数据类型对象。来举个例子:
<script>
var b = new Boolean(false);
if(b){
console.log("运行");
}
</script>
这里b是个对象,不是布尔值,当强制转换成布尔值时,都是true,所以用起来就和我们的预期效果不一样了。
那这三个包装类的用途在哪?
当我们对一些基本数据类型的值去调用属性和方法时,浏览器会临时使用包装类去转换为对象,然后调用相应的方法。
<script>
var s =123;
s = s.toString();
console.log(typeof s);
</script>
这里,s本来是个Number,不是对象,是没有方法的,但是它却可以使用toString()。这就是因为浏览器临时将其转换为对象。
回顾到前面的代码
<script>
var num = new Number(3);
num.hello = "你好";
console.log(num.hello);
var num2 = 3;
num2.hello = "你好";
console.log(num2.hello);
</script>
num2虽然创建一个hello属性不报错,但是最后却是undefined,为什么?
首先,num2被临时转为一个对象,然后添加hello,然后销毁这个对象,当console.log时,hello已经没了。