標籤:
1 6種值被當做假:false、null、undefined、Null 字元串‘‘、數字0、數字NaN,其他所有值都為真,包括"false"
2 typeof有6種值,分別是‘number‘,‘string‘,‘boolean‘,‘undefined‘,‘function‘,‘object‘;其中typeof(null),結果是‘object‘
3 如果第一個運算數的值為真,那麼運算子||產生它的第一個運算數的值.否則,它產生第二個運算數的值.如,可利用||運算子來填充預設值var status = flight.status || "unkonwn"
4 apply方法讓我們構建一個參數數組傳遞給調用函數,它允許我們選擇this的值。apply接受兩個參數,第一個是要綁定給this的值,第二個是參數數組
//構造一個包含兩個數位數組,並將它們相加
var array = [3, 4];
var sum = add.apply(null, array); //sum的值為7
5 異常處理
var add = function(a, b) { if(typeof a !== ‘number‘ || typeof b !== ‘number‘) { throw { name: ‘TypeError‘, message: ‘add needs numbers‘}; } return a + b;}//構造一個try_it函數,以不正確的方式調用之前的add函數var try_it = function() {try {add("seven");} catch (e) {document.writeln(e.name + ‘:‘ + e.message);}}
6 給Number.prototype增加一個integer方法,根據數位正負來判斷是使用Math.ceiling(向上取整)還是Math.floor(向下取整)
Number.method(‘integer‘, function() {return Math[this<0 ? ‘ceil‘ : ‘floor‘](this);});document.writeln((-10/3).integer()); //-3
7 移除字串首尾空白的方法
String.method(‘trim‘, function() {return this.replace(/^\s+|\s+$/g, ‘‘);//正則的意思是從頭開始匹配空白字元一次或多次,從最好開始匹配空白字元一次或多次});document.writeln(‘"‘ + " neat ".trim() + ‘"‘);
8 模組是一個提供介面卻隱藏狀態與實現的函數或對象,模組模式一般形式是:一個定義了私人變數和函數的函數;利用閉包建立可以訪問私人變數和函數的特權函數;最後返回這個特權函數,或者把他們儲存到一個可以訪問到的地方,使用模組模式可以摒棄全域變數的使用
String.method(‘deentityfity‘, function() {//字元實體表,它映射字元實體的名字到對應的字元var entity = {quot: ‘"‘,lt: ‘<‘,gt: ‘>‘};//返回deentityfity方法return function() {return this.replace(//&([^&;]+);/g, function(a, b) {//如果字串可以再映射表中找到就將其替換為映射表中的值var r = entity[b];return typeof r === ‘string‘ ? r : a;});};}());document.writeln(‘<">‘.deentityfity()); // <">
9 javascript缺少塊級範圍,所以,最好的做法是在函數體的頂部聲明函數中可能用到的變數
10 /^ $/i,我們用^和$來框定這個運算式,它指引這個Regex對文本中的所有字元進行匹配,如果省略了這個標識,那麼只要一個字串包含一個數字,這個Regex就進行匹配,但有了這些標識,只有當一個字串的內容僅為一個數位時候,它才會告訴我們,如果僅包含^, 它將匹配以一個數字開頭的字串,如果我們僅包含$, 則匹配以一個數字結尾的字串。
11 (?:...)?表示一個可選的非捕獲型分組
12 javascript中的糟粕
全域變數 :越少越好
範圍 :無塊級範圍,在每個函數開頭部分聲明所有變數
自動插入分號 :因此大括弧風格需使用埃及括弧
Unicode :javascript字元是16位的,只能覆蓋65535個字元
parseInt :增加第二個參數,明確進位,parseInt("08",10)
浮點數 :二進位浮點數不能正確的處理十進位小數,0.1+0.2不等於0.3,不過整數部分是精確的
NaN : typeof NaN === ‘number‘ //true; NaN === NaN //false;
對象 :因為原型鏈的存在,javascript對象永遠不會有真的Null 物件
《Javascript語言精粹》 讀書筆記