JavaScript中每一個值,都屬于某一種資料結構,JavaScript中的資料型別有七種,分別為:
- undefined:表示已宣告但未定義或未賦值
- null:表示空值
- Boolean:表示布林值,只存在true(真)和false(假)兩種值
- object:表示物件,復雜資料型別
- string:表示字符
- number:表示數值
- symbol:表示當前型別的唯一性,屬于Es6新增,本文暫不涉及
而在JS中原始資料型別只有六種分別是undefined,null,boolean,string,number,symbol(Es6新增),object包含有object、array、date等,所以他屬于參考資料型別
undefined和null
在阮一峰老師的JavaScript教程中對兩個值做出了如下解釋
null表示空值,即該處的值現在為空,呼叫函式時,某個引數未設定任何值,這時就可以傳入null,表示該引數為空,比如,某個函式接受引擎拋出的錯誤作為引數,如果運行程序中未出錯,那么這個引數就會傳入null,表示未發生錯誤
undefined表示“未定義”,即已宣告但是并未賦值
他們兩個都可以表示沒有,含義非常的接近
undefined==null //true
undefined===null//false
上面代碼中在兩個值進行等同比較時回傳的結果為ture,只有當恒等的時候才為false,可見這兩個值有多么的相似,
而為什么上述代碼中,在恒等時候回回傳false呢?其實在JavaScript的最初版本是這樣區分的:
-
null是一個表示"無"的物件,轉為數值時為0
-
undefined是一個表示"無"的原始值,轉為數值時為NaN所以null和undefined基本是同義的,只有一些細微的差別,
Boolean
boolean表示布林值,主要用于邏輯判斷,布林值只有true(真)和false(假)這兩個回傳值,用typeof檢查一個布林值時會回傳boolean
-
在運算子中前置邏輯運算子,相等運算子,比較運算子會回傳為布林值,
-
而如果某個位置預期會轉化成布林值,在JavaScript中以下六種情況也會回傳為false,其他值都會為true
undefined?true:false; //false
null?true:false; //false
0?true:false; //false
false?true:false; //false
""?true:false; //false
NaN?true:false; //false
String
string表示字串,就是零個或多個排在一起的字符,放在單引號或雙引號之中,
var s="hello word";
var s1='hello word';
反斜杠(\)在字串內有特殊含義,用來表示一些特殊字符,所以又稱為轉義符,需要用反斜杠轉義的特殊字符,主要有下面這些:
- \0 :null
- \b :后退鍵
- \f :換頁符
- \n :換行符
- \r :回車鍵
- \t :制表符
- \v :垂直制表符
- ’ :單引號
- " :雙引號
- \ :反斜杠
var s2="hello";
console.log(s2[0]); //h
console.log(s2[1]); //e
console.log(s2[2]); //l
console.log(s2[3]); //l
console.log(s2[4]); //o
console.log(s2[5]); //undefined
console.log(s2.length); //5
例如上面代碼,在字串中字符是以字符陣列形式存盤的,所以用陣列的形式訪問字串也可以訪問到,但是這樣訪問到的數值只能具有只讀性,而無法更改,
a[0]='w';
a //hello
number
number表示數值,包括整數和浮點數,并且所有數字都是以64位浮點數形式儲存,
var num=10 ;
var num1=0.1;
var num2=0.2;
由于在JavaScript中浮點數不是精確的值,所以在比較浮點數時要特別的小心,
num1+num2===0.3 //false
0.3/num1 //2.9999999999999996
在JavaScript中64位浮點數的指數部分的長度是11個二進制位,意味著指數部分的最大值是2047,也就是說,64位浮點數的指數部分的值最大為2047,分出一半表示負數,則JavaScript能夠表示的數值范圍為21024到2-1023,超出這個范圍的數無法表示,
如果一個數大于等于2的1024次方,那么就會發生“正向溢位”,即 JavaScript 無法表示這么大的數,這時就會回傳Infinity,
Math.pow(2, 1024) // Infinity
如果一個數小于等于2的-1075次方,那么就會發生為“負向溢位”,即 JavaScript 無法表示這么小的數,這時會直接回傳0,
Math.pow(2, -1075) // 0
NaN(not a number)是JavaScript中的一個特殊值,表示為"非數字",
1–"a" //NaN
1/"a" //NaN
0/0 //NaN
上面代碼運行時,會自動將字串x轉為數值,但是由于x不是數值,所以最后得到結果為NaN,表示它是“非數字”(NaN),
NaN===NaN //false
上面代碼中,可以看得出NaN不等于任何值,包括它本身
object
object表示物件,物件就是一組“鍵值對”(key-value)的集合,是一種無序的復合資料集合
創建物件的方式通常有兩種方式:建構式和物件字面量
建構式創建:
var obj = new Object();
obj.name = "last code";
obj.age =18;
obj.sex="男";
}
字面量創建:
var obj1 = {
name="last code",
age=18,
sex="男"
};
在物件中,讀取屬性的方法有倆種方法,分別是:
obj.name // "last code"
obj['name'] // "last code"
請注意,如果使用方括號運算子,鍵名必須放在引號里面,否則會被當作變數處理,
在物件中不僅可以讀取值還可以賦值,例如:
obj.hobby="玩游戲";
obj["height"]=1.88;
在物件中查看物件的所有值可以用Object.keys(物件名)的方法,
Object.keys(obj1) //['name','age','sex']
在物件中查看屬性是否存在可以用:in 運算子
'name' in obj // true
'sex' in obj //true
注意,in不能識別哪些屬性是物件自身的,哪些屬性是繼承的
屬性的遍歷可以用for…in
for (var i in obj1) {
console.log('鍵名:', i);
console.log('鍵值:', obj1[i]);
}
//鍵名: name
// 鍵值:last code
// 鍵名:sex
// 鍵值:10
// 鍵名:age
// 鍵值:男
注意它遍歷的是物件所有可遍歷的屬性,會跳過不可遍歷的屬性,它不僅會遍歷物件自身的屬性,還遍歷繼承的屬性
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/225369.html
標籤:其他
