javascript技巧

关注公众号 jb51net

关闭
首页 > 网络编程 > JavaScript > javascript技巧 > JavaScript对象与包装类

一文带你深入理解JavaScript对象与包装类

作者:常乐hhh

想当然,大家都认识JS中的对象,也知道一些对象的实现方法,所以在了解包装类之前,我们将来对象的实现方法大概的来回想一下,更感兴趣的小伙伴跟着小编一起来看看吧

对象的创建方式

var mrPeng = {
    name: '彭于晏',
    age: 18,
    sex: 'boy',
};
var obj = new Object();
function Car(name, height) {
    this.name = name;
    this.height = height;
}
var car = new Car('Toyota', 1500);
function Person(name, age){
    var self = {};
    self.name = name;
    self.age = age;
    return self;
}
let p = Person('Alice', 30);

包装类

进度一

先来看看这段JS代码:

   var num = 123;
   num.a = 'aaa'; 
   console.log(num.a); // undefined

简单解释一下代码:代码中先声明了一个Num,并赋值为123,再在Num上挂上一个属性a,其值为字符串aaa,然后打印输出Numa的值

如果你也是这样想的话,那么你心中输出的结果不就是字符串aaa嘛。可是输出的结果真的是字符串aaa吗???

当然不是,我可以清楚的告诉你,该段代码输出的是undefined。说明属性a并没有挂在num上,毕竟num不是对象,那竟然没挂上去,访问不存在的东西时,不应该报错吗?那又为什么输出的是undefined呢?

首先,我们通过该段代码能知道:在JS中原始值(原始类型数据)(如数字Number、字符串String、布尔值boolean等)不能拥有属性和方法,属性和方法只有对象才能拥有。

那么如果我们将var num = 123;改写成var num = new Number(123);呢,我们就得到了一个对象,可是对象里面没有key,只有一个值为123。展开Number(123)这个对象看一下,就会看到有一个[[PrimitiveValue]]:123,意思就是说这是一种特殊的对象Number(123),这个对象就是我们说的包装类

你说他是对象他就是对象,你说他是数字他也是数字,他能当成数字来用。

   var num = new Number(123);
   console.log(num*2);// 输出246
   num.a = 'aaa'; 
   console.log(num.a); //输出aaa

这就说明当你将他用来当对象,他就是对象,用来当数字,他就是数字。

var num = 123;这种创建的叫数字字面量,而var num = new Number(123);创建的叫Number对象(数字对象)。对象是可以有属性和方法的,而原始值是没有的。

进度二

让我们来看看先这段代码:

var str ='asdf'   
console.log(str.length)  //输出4

为什么这个能输出4呢?总不能说刚刚得到的结论是错的吧

在解决上面这个问题前先来看看这段代码:

   var num = 4;
   num.len = 3; //
   console.log(num.len); // undefined

根据上面的结论,我们能知道这里的 len是不能挂在原始值上的,输出的肯定是undefined,没错吧。

我们来解析一下上面那段代码,看看在v8引擎是怎样实现的:

访问对象不存在的属性,会返回undefined

访问不存在的不变量,会报错!!

那么现在我们来解决上面那个问题:

var str ='asdf'   
console.log(str.length)  //输出4

总结

以上就是深入理解JavaScript对象与包装类的详细内容,更多关于JavaScript对象与包装类的资料请关注脚本之家其它相关文章!

您可能感兴趣的文章:
阅读全文