js中一切都是对象吗?

230 阅读2分钟

一切皆可看作对象

对象就是可以拥有属性和方法的一个集合,一个人就是一个对象,他拥有身高和体重的属性,拥有吃饭睡觉的动作方法。

基本类型的包装对象

基本数据类型包括string、number、boolean、null、undefined。

基本数据类型是指非对象并且无方法的数据。

var  soldiers="he is a soldiers";
var output=soldiers.charAt(5)
console.log(output)

==>a

为什么基本类型可以使用字符串方法呢?

其实是因为包装对象。

当执行var output=soldiers.charAt(5)这个步骤的时候,后台会 var soldiers=new String('he is a soldiers'),将其包装成一个和soldiers值相等的对象返回,然后通过var output=soldiers.charAt(5)调用方法返回给output,再让soldiers=null,最后再销毁。

同理,数字、布尔值在读取属性的时候也可以通过自己的构造函数来创建自己的一个临时对象,并像对象一样引用各自的属性,所以,字符串、数字、布尔值都可以看成是对象,注意,这里是看成对象,他们并不是真正的对象,也就是严格来说,它们并不是对象,因为对象是可变的,可以修改属性,而原始值是不可变的是不可修改的。

var b="abcdefg";
console.log(b.toUpperCase());
console.log(b);

它只是返回一个变成大写的副本,并没有改变原始的变量。而且不能在原始数据类型上添加属性和方法。因为创建的只是一个临时对象,写的属性和方法只存在于临时对象上,引用完后随即销毁。

引用类型

引用类型包括function、array、date等。他们本身包含这属性和方法,属于严格意义上的对象。

var obj={
    width:100
    height:200
    say:function(){
        console.log('hello')
    }
}

以上就相当于
obj.width=100
obj.height=200
obj.say=function(){
    console.log('hello')
}

并且对象的属性和方法是可以改变的。
例如:obj.width=500