1. 程式人生 > >js物件和Object關係、以及js資料型別雜談

js物件和Object關係、以及js資料型別雜談

今晚上很意外看到一個面試題,js物件和Object的關係,然後梳理了下腦中的知識~~

JavaScript物件和Object關係

        W3C上有說JavaScript中所有事物都是物件:數字、字串、陣列、函式等等…我感覺從某種意義上是對的,但也有例外,首先js物件就是一種具有屬性和方法的特殊資料型別,而Object是js中原型鏈的起點,js中的物件都繼承了他,有一個方法可以驗證就是使用instanceof方法,instanceof的作用是檢測一個建構函式的prototype是否在一個物件的原型鏈上,比如說;

var arr = [ 1, 2 ];
arr instanceof
Object;//true,檢測Object建構函式的prototype是否在arr物件的原型鏈上

剛才我有說的例外,就是像字串這種基本資料型別字面量宣告方式,我們都知道字串有兩種宣告方式,字面量:

var str1 = '123';

和建構函式方式:

var str2 = new String( '123' );

這樣的話str1就不是一個物件,沒有屬性和方法,str2是一個物件,這樣說可能會產生誤解,因為我們知道str1也是可以訪問屬性的:

str1.length;//3

這是怎麼回事呢?這裡其實是通過String建構函式生成了一個臨時的物件:

var _str = new String( str
); _str.length;//3,然後再把_str物件給銷燬掉

比如說我們這樣測試下:

var str = '123';
str.a = 1;//這裡會利用String建構函式產生一個臨時物件
str.a;//undefined,這裡又是產生的另外一個臨時物件,所以屬性a為undefined

JavaScript資料型別

    JavaScript有六種基本資料型別:string、boolean、number、null、undefined、symbol(es6新新增)
還有一種複雜資料型別:object

如果有發現錯誤,請在評論中告訴我~~~