国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

Effective JavaScript讀書筆記(一)

zhoutao / 945人閱讀

摘要:如果為假值,不傳或者傳入,函數都會返回但是,傳入這個值是完全有可能的,所以這種判斷形勢是不正確的或者使用來判斷也可以原始類型優于封裝類型對象擁有六個原始值基本類型布爾值,數字,字符串,,和對象。

作為一個前端新人,多讀書讀好書,夯實基礎是十分重要的,正如蓋樓房一樣,底層穩固了,才能越壘越高。從開始學習到現在,基礎的讀了紅寶書《JavaScript高級程序設計》,犀牛書《JavaScript權威指南》,特別是紅寶書,是把我領進js領域的一本書?,F在到了進階階段(可能紅寶書還會回去繼續翻),準備開始讀《Effective JavaScript》,剛拿到手,很薄的一本書,也把讀書筆記整理下來,希望養成一個良好的讀書習慣。

讓自己習慣JavaScript 了解JavaScript的版本

目前主流JavaScript版本任然是ES5,在ES5開始引入嚴格模式

use strict;//在文件頭或者函數體頂部使用,就是嚴格模式

一般來說,我們如果想編寫一個通用型插件,都需要使用嚴格模式來進行開發,但是在使用嚴格模式開發時會出現一個問題,工程先后引入兩個文件file1.js和file2.js,file1.js使用的嚴格模式進行開發,file2是非嚴格模式,那么下面的代碼會出問題。

真值運算
JavaScript中的邏輯運算if、||和&&理論上是可以接受任何值的,因為JavaScript中
所有類型都會在邏輯運算中轉換成布爾值

JavaScript中有7個假值:false、0,-0、""、NaN、null、undefined

由于數字和字符串可能為假值,所以,使用針織運算檢查函數參數或者對象屬性是否已經存在不是絕對安全的。

function point(x){
    if(!x){
        return 26;//如果x為假值,不傳或者傳入0,函數都會返回26
    }
}
point(0);//x:26
//但是,傳入0這個值是完全有可能的,所以這種判斷形勢是不正確的
function point(x){
    if(typeof x === "undefined"){
        return 26;
    }
    //或者使用if(x === undefined)來判斷也可以
}

原始類型優于封裝類型

JavaScript對象擁有六個原始值基本類型: 布爾值,數字,字符串,null,undefined和對象。

需要注意的是,使用typeof對null判斷得到的結果是"object",ECMAScript標準描述null是一個獨特的類型

創建原始類型與創建基本類型
//創建一個String對象,內部封裝一個字符串值
var s = new String("hello");
s + " world";// "hello world"
//創建一個原始類型
var str = "string";
//封裝類型本質是一個對象,原始類型才是基本類型,可以使用typeof來查看
typeof s;// "object"
typeof str;// "string"
//由于封裝類型自身是一個對象,因此即使內部封裝的值相同,兩個對象也是不相等的
var s1 = new String("string");
var s2 = new String("string");
s1 === s2;//false
s1 == s2;//false

總體來講,一般不需要使用封裝類型來代替基本類型,因為基本類型無論是從聲明還是使用都較為方便。而且,基本類型本身是沒有任何方法的,不過可以隱式轉換成String對象來執行其內部方法:

var s = "hello";//基本類型
s.toUpperCase();//HELLO,將s隱式轉換成String對象

【注】隱式封裝的類型有一點需要特別注意:每一次隱式封裝都會產生一個新的String對象,原來的對象會被拋棄,也就是說新產生的隱式封裝對象生命周期就是所在行代碼執行完成。

"string".value = 26;
"string".value;//undefined
第二行代碼隱式封裝形成了新的String對象,新的String對象內部沒有value這個屬性值,因此是undefined

對JavaScript原始類型值設置屬性是沒有意義的

避免對回合類型使用 == 運算符

由于JavaScript隱式轉換的存在,因此,在使用 == 運算符的時候,有時候可能不會得到我們所預期的結果。

"1.0e0" == { valueOf: function(){ return true } };
//結果是true,因為右側valueOf結果是true,會被隱式轉換成數字1,根據隱式轉換法則,左側字符串也會被隱式轉換成1,因此比較是相等的。
// 使用==運算符比較時一些特殊情況
null == undefined;//true,這種情況永遠是true
null/undefined ==
string/number/boolean;//false,這種情況永遠是false
string/number/boolean == string/number/boolean;// 將原始類型轉換為數字進行比較
string/number/boolean == Date對象;// 先將原始類型轉化成數字,再將date類型轉化成原始類型(優先嘗試toString,其次嘗試valueOf)
string/number/boolean == 非Date對象;// 先將原始類型轉化成數字,再將date類型轉化成原始類型(優先嘗試valueOf,其次嘗試toString)

// 關于Date對象比較問題

var date = new Date("1993/07/11");
date == "1993/07/11";//false

這是因為Date對象調用toString方法之后轉換的不是我們所熟知的字符串形式。

在瀏覽器中調用date.toString(),結果是"Sun Jul 11 1993 00:00:00 GMT+0800 (中國標準時間)"

//將Date類型字符串轉換成我們定義格式的字符串
function toYMD(date){
    var y = date.getYear() + 1,
        m = date.getMonth() + 1,
        d = date.getDate();
    return y + "/"
         + (m < 10 ? "0" + m : m) + "/"
         + (d < 10 ? "0" + d : d);
}
toYMD(new Date("1993/07/11")); //"1993/07/11"

在比較的時候,最好使用嚴格相等運算符 ===,這是一個良好的習慣

了解分號插入的局限

JavaScript語法對于分號沒有硬性的規定,其語言機制自身會自動添加分號而區分開語句,了解分號插入的規則,對于提高JavaScript代碼的嚴謹性有著巨大的幫助。

分好僅在 } 標記之前、一個或多個換行符之后和程序的輸入結尾被插入

換而言之,我們只可以在一行、一個代碼塊和一段程序結束的地方省略分號,其他任何地方省略分好都有可能出現錯誤。

function foo1(r){ r += r; return r };//合法
function foo2(r){ r += r return r };//不合法
分好僅在隨后的輸入標記不能被解析時插入

換句話說,分好是JavaScript為我們提供的一種錯誤校正機制

a = b
(f());
// 上面這段代碼會被解析成
a = b(f());//這是一條合法語句
a = b
f();//下面這段代碼會被解析成兩條獨立的語句,因為 a = b f()是不合法的語句

換句話說,其實JavaScript只是為我們機械化的解決了語法問題而已,如果解析不合法,就會為我們通過插入分號來解決問題,但是,可能不是我們所預期的,因此,規范化的代碼才是重中之重,盡量不要省略分號。

另一個比較重要的情況是:return語句,在return關鍵字和其可選參數之間一定不可以包含換行符。

return {}; //一條語句,返回一個空對象
return 
{}; 
//上面語句等價于
return ; 
{}
;
也就是會自動在return后面的換行符前插入一個分號

另外一種特殊情況就是++運算符和--運算符

a
++
b;
//會被解析成
a;
++b;

在return、throw、break、continue、++、--的參數之前不可以換行

分號不會作為分隔符在for循環空語句的頭部被自動插入

也就是說,for循環體內必須顯式的包含分號,否則會出錯

for(var i = 0, total = 1 // 解析出錯
    i < n
    i++)
視字符串為16位的代碼單元序列

幾種流行的Unicode編碼:utf-8、utf-16、utf-32

JavaScript字符串是由16位代碼單元組成,而不是由Unicode代碼點組成

JavaScript使用兩個代碼單元表示2e16及以上的Unicode代碼點。這兩個代碼單元被稱為代碼對。

代理對甩開了字符串元素計數,length、charAt、charCodeAt方法以及正則表達式模式受到了影響

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/89723.html

相關文章

  • Effective JavaScript讀書筆記(二)

    摘要:盡可能的使用局部變量,少用全局變量。正確的實現就是在函數體內部使用將聲明成局部變量。在新特性中,引入了塊級作用域這個概念,因此還可以使用,來聲明局部變量。它們共享外部變量,并且閉包還可以更新的值。 變量作用域 作用域,對于JavaScript語言來說無處不在,變量作用域,函數作用域(運行時上下文和定義時上下文),作用域污染等等都跟作用域息息相關,掌握JavaScript作用于規則,可以...

    Yuqi 評論0 收藏0
  • 讀書筆記:編寫高質量javascript的68個方法

    摘要:第條盡量少使用全局對象避免聲明全局變量盡量聲明局部變量避免對全局變量增加屬性第條始終聲明局部變量第條避免使用語句第條熟練使用閉包的函數值包含了比調用他們時執行所需要的代碼還要更多的信息。那些在其所涵蓋的作用域內跟蹤變量的函數稱為閉包。 書還沒看完。一遍看,一遍寫讀書筆記。 這本書的序是JavaScript之父Brendan Eich寫的,作者是JavaScript標準化委員會專家??上?..

    Vicky 評論0 收藏0
  • JavaScript模式》讀書筆記:基本技巧

    摘要:模式的讀書筆記,個人向更新進度隨我的閱讀進度基本技巧盡量少用全局變量防止變量污染注意變量提升問題盡量使用單一模式,只使用一個在函數頂部進行變量聲明函數體循環優化循環條件優化對進行操作上面那種循環,將作為循環條件,每次循環時都要訪問數據的長度 《JavaScript模式》的讀書筆記,個人向!更新進度隨我的閱讀進度 基本技巧 盡量少用全局變量 防止變量污染 注意JS變量提升問題 盡量使用...

    wapeyang 評論0 收藏0

發表評論

0條評論

zhoutao

|高級講師

TA的文章

閱讀更多
最新活動
閱讀需要支付1元查看
<