js物件和Object關係、以及js資料型別雜談
阿新 • • 發佈:2018-12-29
今晚上很意外看到一個面試題,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;
如果有發現錯誤,請在評論中告訴我~~~