今天我们一起聊聊JavaScript中与数据类型相关的一个概念:包装对象。

在JavaScript中有七种数据类型

这七种数据类型中,对象为“引用类型”,其他六种为“原始类型”(或叫“值类型”,或叫“基本类型”)。

一、原始类型有没有属性和方法

这是我们讨论的第一个问题,原始类型有没有属性和方法?按原始类型与引用类型的定义来说,只有引用类型(对象)才有属性和方法,原始类型是没有自己的属性和方法的,但是我们也能经常看到有下面这样的写法。

var num = 100;
var str = num.toString(); 
console.log(typeof str); //string

我们使用toString方法将num这个数值型转换成了字符串型,这里面我们用原始类型num调用了toString方法,那是不是原始类型也能调用方法呢js对象赋值,答案是否定的。仍然只有对象才能拥有自己的属性和方法。

那为什么num就真的调用了toString却没有报错呢,这就需要我们接着讨论包装对象的概念了。

二、包装对象

在JavaScript中有三种包装对象,他们对应的构造函数分别是String,Number,Boolean,看名字大家应该就能知道了,这三个包装对象对应着三个原始类型:字符串、数值和布尔。当我们使用原始类型调用toString方法的时候,原始类型会先通过其包装对象对应的构造函数转换成对象,然后用这个对象调用方法,调用方法之后,原始类型仍是原始类型,新创建的包装对象会被销毁。

我们现在做一个案例来进一步说明这个说法。

//定义五个原始类型
var str = "hello"; //包装对象String
var num = 100; //包装对象Number
var bool = true; //包装对象Boolean
var und = undefined; //无包装对象
var nu = null; //无包装对象
//输出五个值,建议分别输出,查看那一条报错。
console.log(str.toString());
console.log(num.toString());
console.log(bool.toString());
console.log(und.toString()); //报错
console.log(nu.toString()); //报错

如上面的代码所示,有包装对象的原始类型可以成功执行toString方法,没有包装对象的原始类型会报错,这进一步说明了我们的观点。

接下来我们再来看一个例子,通过包装对象,我们也能得到原始类型的某些属性,例如length属性

var str = "hello";
var un = undefined;
console.log(str.length); //5
console.log(un.length); //报错

通过length属性,我们可以获取到字符串的长度,这也是受益于包装对象,但是undefined就不能输出length了(当然,我们也没这个必要输出undefined的长度,这里只是做一个示范)

我们再来看看下面这个例子

var str = "hello";
str.name = "test";
console.log(str.name); //输出undefined

我们为str添加了name属性,这行代码成功执行,但是最后一行输出的却是undefined,这是为什么呢?

上面我们已经说了,如果需要原始类型具有属性和方法,那包装对象就要登场,运行完之后,包装对象创建的对象就会被销毁js对象赋值,在上面的例子中,第二行给name属性赋值的时候,包装对象会登场,创建一个str对应的对象,当然,这行执行完了这个对象就会被销毁。然后在第三行又会创建一个新的包装对象,这个对象当然是没有name属性的了,所以输出的是undefined。

三、总结

原始类型是没有属性和方法的,他们就是单纯的值,如果希望获取他们的属性或调用方法,那就需要包装对象来帮忙,但是帮完了,生成的对象马上就会被销毁。了解了这些,大家以后再看到原始类型可以调用方法,就不会感觉到意外了。

js json对象赋值_js一次给数组对象赋值_js对象赋值

限 时 特 惠: 本站每日持续更新海量各大内部创业教程,一年会员只需98元,全站资源免费下载 点击查看详情
站 长 微 信: muyang-0410