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