(1)Javascript是不區分整數和浮點數的,統一用Number表示,
NaN表示Not a Number,當無法計算結果時用NaN表示,
Infinity表示無限大,當數值超過了JavaScript的Number所能表示的最大值時,就表示為Infinity
與C/C++不同的一點是(1 + 2) * 5 / 2; // 7.5而不是像C/C++只取整數部分
另外, JavaScript允許對任意數據類型做比較: false == 0; // true false === 0; // false
(2)要特別注意相等運算符==。JavaScript在設計時,有兩種比較運算符:
第一種是==比較,它會自動轉換數據類型再比較,很多時候,會得到非常詭異的結果;
第二種是===比較,它不會自動轉換數據類型,如果數據類型不一致,返回false,如果一致,再比較。
由于JavaScript這個設計缺陷,不要使用==比較,始終堅持使用===比較。
另一個例外是NaN這個特殊的Number與所有其他值都不相等,包括它自己:
NaN === NaN; // false
唯一能判斷NaN的方法是通過isNaN()函數:
isNaN(NaN); // true
(3)null和undefined
null表示一個“空”的值,它和0以及空字符串”不同,0是一個數值,”表示長度為0的字符串,而null表示“空”。
在其他語言中,也有類似JavaScript的null的表示,例如Java也用null,Swift用nil,Python用None表示。但是,在JavaScript中,還有一個和null類似的undefined,它表示“未定義”。
JavaScript的設計者希望用null表示一個空的值,而undefined表示值未定義。事實證明,這并沒有什么卵用,區分兩者的意義不大。大多數情況下,我們都應該用null。undefined僅僅在判斷函數參數是否傳遞的情況下有用。
(4)數組 JavaScript的數組可以包括任意數據類型。例如:var arr=[1, 2, 3.14, ‘Hello’, null, true]; 另一種創建數組的方法是通過Array()函數實現:var arr2=new Array(1, 2, 3);
若索引超出了范圍,返回undefined
(5)對象 JavaScript的對象是一組鍵值對組成的無序集合,例如 var person = { name: ‘Bob’, age: 20, tags: [‘js’, ‘web’, ‘mobile’], city: ‘Beijing’, hasCar: true, zipcode: null };
JavaScript對象的鍵都是字符串類型,值可以是任意數據類型,其中每個鍵又稱為對象的屬性,例如,person的name屬性為’Bob’,zipcode屬性為null。要獲取一個對象的屬性,我們用對象變量.屬性名的方式
(6)變量 變量名是大小寫英文、數字、$和_的組合,且不能用數字開頭,變量名也可以用中文,但是,請不要給自己找麻煩。同一個變量可以反復賦值,而且可以是不同類型的變量。這種變量本身類型不固定的語言稱之為動態語言 例如:
var a = 123; // a的值是整數123 a = ‘ABC’; // a變為字符串
JavaScript在設計之初,為了方便初學者學習,并不強制要求用var聲明變量。這個設計錯誤帶來了嚴重的后果:如果一個變量沒有通過var聲明就被使用,那么該變量就自動被聲明為全局變量:
i = 10; // i現在是全局變量
在同一個頁面的不同的JavaScript文件中,如果都不用var申明,恰好都使用了變量i,將造成變量i互相影響,產生難以調試的錯誤結果。
為了修補JavaScript這一嚴重設計缺陷,ECMA在后續規范中推出了strict模式,在strict模式下運行的JavaScript代碼,強制通過var申明變量,未使用var申明變量就使用的,將導致運行錯誤。
啟用strict模式的方法是在JavaScript代碼的第一行寫上:
‘use strict’; 這是一個字符串,不支持strict模式的瀏覽器會把它當做一個字符串語句執行,支持strict模式的瀏覽器將開啟strict模式運行JavaScript。
‘use strict’; //如果瀏覽器支持strict模式,下面的代碼將報ReferenceError錯誤: abc = ‘Hello, world’; alert(abc);
(7)字符串 JavaScript的字符串就是用”或”“括起來的字符表示。
ASCII字符可以以 /x## 形式的十六進制表示,例如:
‘/x41’; // 完全等同于 ‘A’
還可以用/u####表示一個Unicode字符
‘/u4e2d/u6587’; // 完全等同于 ‘中文’
多行字符串
由于多行字符串用/n寫起來比較費事,所以最新的ES6標準新增了一種多行字符串的表示方法,用反引號 表示:
這是一個 多行 字符串
;
注意:反引號在鍵盤的ESC下方,數字鍵1的左邊:
模板字符串
要把多個字符串連接起來,可以用+號連接:
var name = ‘小明’; var age = 20; var message = ‘你好, ’ + name + ‘, 你今年’ + age + ‘歲了!’; alert(message); 如果有很多變量需要連接,用+號就比較麻煩。ES6新增了一種模板字符串,表示方法和上面的多行字符串一樣,但是它會自動替換字符串中的變量:
var name = ‘小明’; var age = 20; var message = 你好, ${name}, 你今年${age}歲了!
;//注意用的是反引號 alert(message);
操作字符串
var s = ‘Hello, world!’;
要獲取字符串某個位置的字符,使用類似Array的下標操作,索引號從0開始:
s[13]; // undefined 超出范圍的索引不會報錯,但一律返回undefined
需要特別注意的是,字符串是不可變的,如果對字符串的某個索引賦值,不會有任何錯誤,但是,也沒有任何效果:
var s = ‘Test’; s[0] = ‘X’; alert(s); // s仍然為’Test’
JavaScript為字符串提供了一些常用方法,注意,調用這些方法本身不會改變原有字符串的內容,而是返回一個新字符串:
toUpperCase
toUpperCase()把一個字符串全部變為大寫:
var s = ‘Hello’; s.toUpperCase(); // 返回’HELLO’
toLowerCase
toLowerCase()把一個字符串全部變為小寫:
var s = ‘Hello’; var lower = s.toLowerCase(); // 返回’hello’并賦值給變量lower lower; // ‘hello’
indexOf
indexOf()會搜索指定字符串出現的位置:
var s = ‘hello, world’; s.indexOf(‘world’); // 返回7 s.indexOf(‘World’); // 沒有找到指定的子串,返回-1
substring
substring()返回指定索引區間的子串:
var s = ‘hello, world’ s.substring(0, 5); // 從索引0開始到5(不包括5),返回’hello’ s.substring(7); // 從索引7開始到結束,返回’world’
新聞熱點
疑難解答