object 、number 、string 、boolean 、null 、
undefined
其中,number、string、boolean、undefined為基本資料型別,與基本資料型別對應的是引用資料型別。
null,object為引用資料型別。
只要記住:當基本資料型別複製時,就相當於有兩個儲存空間所存的值相同,此時當你改變其中乙個的值,另乙個是不受影響的:
當b的值變為2,a的值還是1。
但是,如果是引用資料型別複製時,就相當於兩個變數指向同乙個儲存空間(類似c語言中的指標),改變其中乙個的值,另乙個也會跟著變:
當我改變了obj1中的值,obj2中的值也跟著改變了。
typeof——返回乙個用來表示表示式的資料型別的字串。
typeof是個一元操作符:類似++a。所以不用加(),但是如果是個運算表示式則要加(),例如:typeof(a+b)。
下面就挨個來實驗一遍:
陣列、物件、函式、null都屬於引用型別,但是,typeof只能詳細區分出function,別的都是object。
需要注意的是null的型別也是object(類似乙個空指標)。
而每一種基本資料型別,typeof都能夠具體區分。
instanceof 可以用於測試是否為引用型別(object, array, function, date, regexp, 包裝類(number, string, boolean))。
由於typeof只能判斷型別,所以,陣列和物件返回的都是object,這時就需要使用instanceof來判斷是陣列還是物件。
判斷物件是否是指定的建構函式的例項。
還可以判斷原型鏈上是否有指定的原型。
father.prototype.lastname = "wang";只要記住:null就相當於空指標,就是不存在的物件。function father()
var father = new father()
son.prototype = father;
function son(name,age)
var person1 = new son("aaa",18);
console.log(person1 instanceof son); //true
console.log(person1 instanceof father); //true
而undefined是已經宣告了,但是還未賦值。
這樣說好像是區分開了一點,但是實際使用又有什麼需要注意的嗎?這個可以參考這篇文章。
然後又有個問題:兩者是否相等,來實驗一下:
第乙個報錯:賦值無效,說明null是不存在物件;
第二個為true:是因為「==」將兩邊都轉換為布林值false了,也就是null和undefined轉化為布林值是都是false。
第三個為false:是因為「===」是「嚴格等於」,必須型別相同,之前我們也試驗過:null為object型別,兩者不一樣。
再來實驗另外一種情況:
第乙個為true:是因為x未賦值時預設為undefined,兩邊值型別相同,按照「===」規則比較,即看是否嚴格相同,所以為true。
第二個為true:是因為x的值為undefined,「==」將兩邊都轉換為布林值false,所以相等。
第三個為true:是因為兩邊都是undefined。
第四個為false:是因為兩邊型別不同。
由這個例子,可以得到:如果想要判斷乙個值為空時,用「==」則null和undefined都一樣,但是用「===」則會是相反。
原因在於:1、null和undefined型別不一樣;
2、「==」會隱式轉換型別。
JS學習 資料型別
字串值,數值,布林值,陣列,物件 var length 7 數字 var lastname gates 字串 var cars porsche volvo bmw 陣列 var x 物件1 當數值和字串相加時,j ascript 將把數值視作字串。例子 var x 911 porsche j asc...
JS學習 資料型別篇
es5標準中js主要有6種資料型別 1.數值 number 整數和小數 如123,3.14 2.字串 string 文字 如 hello 3.布林型別 boolean true和false 4.undefined 表示未定儀或不存在的值 5.null 表示空 6.物件 object 表示一系列值得集...
js資料型別
一.原始資料型別 1.typeof 運算子。var a alert typeof a 輸出結果為 undefined 2.undefined 未定義 型別 當變數未定義時,該變數值被預設為undefined 如 var a alert typeof a 輸出結果為 undefined 注意值unde...