红皮书:基本概念(三)
數(shù)據(jù)類型
ECMAScript中有5種簡單數(shù)據(jù)類型(也稱為基本數(shù)據(jù)類型):undefined,null,boolean,number和string。
typeof
typeof null會返回“object”。因?yàn)樘厥庵祅ull被認(rèn)為是一個(gè)空的對象引用。
undefined
undefined類型只有一個(gè)值,即特殊的undefined。在使用var聲明變量,但沒有對變量進(jìn)行初始化時(shí),這個(gè)變量的值就是undefined。
對未初始化的變量執(zhí)行typeof操作符會返回undefined,而對未聲明的變量執(zhí)行typeof操作符同樣也會返回undefined。
var message; alert(typeof message); // undefined alert(typeof age); // undefined
null
null類型是第二個(gè)只有一個(gè)值的數(shù)據(jù)類型,這個(gè)特殊的值是null。從邏輯角度上看,null值表示一個(gè)空對象指針,而這也正是使用typeof操作符檢測null值會返回“object”的原因。
alert(null==undefined); // true
這里,位于null和undefined之間的相等操作符(==)總是返回true。
盡管null和undefined有這樣的關(guān)系,但它們的用途完全不同。如前所述,無論在什么情況下都沒有必要把一個(gè)變量顯式地設(shè)置為undefined,可是同樣的規(guī)則對null卻不適用。換句話說,只要意在保存對象的變量還沒有真正保存對象,就應(yīng)該明確地讓該變量保存null值。這樣做不僅可以體現(xiàn)null作為空對象指針的慣例,而且也有助于進(jìn)一步區(qū)分null和undefined。
Boolean類型
該類型只有兩個(gè)字面值:true和false。這2個(gè)值跟數(shù)字值不是同一回事,因?yàn)閠rue不一定等于1,false不一定等于0。該類型的2個(gè)值是區(qū)分大小寫的。
雖然Boolean類型只有兩個(gè)字面值,但ECMAScript所有類型的值都有與這兩個(gè)Boolean值等價(jià)的值。要將一個(gè)值轉(zhuǎn)換為其對應(yīng)的Boolean值,可以調(diào)用轉(zhuǎn)型函數(shù)Boolean()。
var message="hello world!"; var messageAsBoolean=Boolean(message); console.log(messageAsBoolean);// true
Number類型
浮點(diǎn)數(shù)值
浮點(diǎn)數(shù)值的最高精度是17位小數(shù),但在進(jìn)行算術(shù)計(jì)算時(shí)其精確度遠(yuǎn)不如整數(shù)。例如,0.1加0.2的結(jié)果不是0.3,而是0.300000000000000004,這個(gè)小小的舍入誤差會導(dǎo)致無法測試特定的浮點(diǎn)數(shù)值。
var a=0.2,b=0.1;
if(a+b==0.3){
console.log("you got 0.3.");
}
我們測試這兩個(gè)數(shù)的和不等于3,如果這2個(gè)數(shù)是0.25和0.05,或者是0.15和0.15,結(jié)果都是沒有問題的。如果是0.1和0.2,那么測試無法通過。因此,永遠(yuǎn)不要測試某個(gè)特定的浮點(diǎn)數(shù)值。
NaN
NaN的兩個(gè)特點(diǎn),一是任何涉及NaN的操作(例如NaN/10)都會返回NaN,這個(gè)特點(diǎn)在多步計(jì)算中有可能導(dǎo)致問題。其次,NaN與任何值都不相等,包括NaN本身。
isNaN()函數(shù)接收一個(gè)參數(shù),該參數(shù)可以是任何類型,而函數(shù)會幫我們確定這個(gè)參數(shù)是否“不是數(shù)值”,isNaN()在接收這個(gè)值后,會嘗試將這個(gè)值轉(zhuǎn)換為數(shù)值。而任何不能被轉(zhuǎn)換為數(shù)值的值都會導(dǎo)致這個(gè)函數(shù)返回true.
alert(NaN==NaN); // false
alert(isNaN(isNaN)); // true
alert(isNaN(10)); // false
alert(isNaN("10")); // false
alert(isNaN("blue")); // true
alert(isNaN(true)); // false
數(shù)值轉(zhuǎn)換
Number(), parseInt(),parseFloat()
Number()函數(shù)的轉(zhuǎn)換規(guī)則如下:
1.如果boolean值,true和false將分別被轉(zhuǎn)換為1和0
2.如果是數(shù)字值,只是簡單的傳入和返回
3.如果是null值,返回0
4.如果是undefined,返回NaN
操作符
一元操作符
遞增和遞減操作符
執(zhí)行前置遞增和遞減操作時(shí),變量的值都是在語句被求值以前改變的。(在計(jì)算機(jī)科學(xué)領(lǐng)域,這種情況通常被稱為副效應(yīng))
var age = 29; var anotherAge = --age +2; alert(age); // 28 alert(anotherAge); // 30
由于前置遞增和遞減操作與執(zhí)行語句的優(yōu)先級相等,因此整個(gè)語句會從左至右被求值。
var num1 = 2; var num2 = 20; var num3 = --num1 + num2; // 等于21 var num4 = num1 + num2; // 等于21
后置型遞增和遞減操作符的語法不變(仍然分別是++和--),只不過要放在變量的后面而不是前面。后置遞增和遞減與前置遞增和遞減有一個(gè)非常重要的區(qū)別,即遞增和遞減操作是在包含他們的語句被求值之后才執(zhí)行的。
var num1 = 2; var num2 = 20; var num3 = num1-- + num2; // 等于22 var num4 = num1 + num2; // 等于21
一元加和減操作符
在對非數(shù)值應(yīng)用一元加操作符時(shí),該操作符會像Number()轉(zhuǎn)型函數(shù)一樣對這個(gè)值執(zhí)行轉(zhuǎn)換。換句話說,布爾值false和true將被轉(zhuǎn)換為0和1,字符串值會被按照一組特殊的規(guī)則進(jìn)行解析,而對象是先調(diào)用它們的valueOf()和toString()方法,再轉(zhuǎn)換得到的值。
var s1 = "01";
var s2 = "1.1";
var s3 = "z";
var b = false;
var f = 1.1;
var o = {
valueOf : function(){
return -1;
}
}
s1 = +s1; // 1
s2 = +s2; // 1.1
s3 = +s3; // NaN
b = +b; // 0
f = +f; // 1.1
o = +o; // -1
一元減操作符只要用于表示負(fù)數(shù),例如將1轉(zhuǎn)換成-1。
一元加和減操作符只要用于基本的算術(shù)運(yùn)算,也可以像前面的示例所展示的一樣用于轉(zhuǎn)換數(shù)據(jù)類型。
加性操作符
加法
var result1 = 5+5; alert(result1); // 10 var result2 = 5+"5"; alert(result2); // "55"
減法
var result1 = 5 - true; //4 var result2 = NaN -1; // NaN var result3 = 5-3; //2 var result4 = 5 - ""; //5 var result5 = 5 - "2"; // 3 var result6 = 5 - null; // 5
相等操作符
null == undefined; // true "NaN" == NaN; // false 5 == NaN; // false NaN == NaN; // false NaN != NaN; // true false ==0; // true true == 1; // true true == 2; // false undefined ==0; false null ==0; false "5"==5; // true
記住:null == undefined會返回true,因?yàn)樗鼈兪穷愃频闹担坏玭ull===undefined會返回false,因?yàn)樗鼈兪遣煌愋偷闹怠?/p>
函數(shù)
function sum(num1, num2){
return num1 + num2;
alert("Hello world"); // 永遠(yuǎn)不會放棄
}
這個(gè)函數(shù)會在執(zhí)行完return 語句之后停止并立即退出。因此,位于return 語句之后的任何代碼都不會執(zhí)行。
作者:風(fēng)雨后見彩虹
出處:http://www.cnblogs.com/moqiutao/
聲明:如果您覺得本文對您的學(xué)習(xí)有所幫助,請多關(guān)注支持與鼓勵(lì)。
正在看本人博客的這位童鞋,我看你氣度不凡,談吐間隱隱有王者之氣,日后必有一番作為!屏幕右下角有“推薦”二字,如果覺得對你有幫助,你就順手把它點(diǎn)了吧。
總結(jié)
以上是生活随笔為你收集整理的红皮书:基本概念(三)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 磁盘格式化
- 下一篇: 简单的理解deflate算法