成人无码视频,亚洲精品久久久久av无码,午夜精品久久久久久毛片,亚洲 中文字幕 日韩 无码

資訊專欄INFORMATION COLUMN

Effective JavaScript讀書筆記(一)

zhoutao / 996人閱讀

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

作為一個(gè)前端新人,多讀書讀好書,夯實(shí)基礎(chǔ)是十分重要的,正如蓋樓房一樣,底層穩(wěn)固了,才能越壘越高。從開始學(xué)習(xí)到現(xiàn)在,基礎(chǔ)的讀了紅寶書《JavaScript高級(jí)程序設(shè)計(jì)》,犀牛書《JavaScript權(quán)威指南》,特別是紅寶書,是把我領(lǐng)進(jìn)js領(lǐng)域的一本書。現(xiàn)在到了進(jìn)階階段(可能紅寶書還會(huì)回去繼續(xù)翻),準(zhǔn)備開始讀《Effective JavaScript》,剛拿到手,很薄的一本書,也把讀書筆記整理下來,希望養(yǎng)成一個(gè)良好的讀書習(xí)慣。

讓自己習(xí)慣JavaScript 了解JavaScript的版本

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

use strict;//在文件頭或者函數(shù)體頂部使用,就是嚴(yán)格模式

一般來說,我們?nèi)绻刖帉懸粋€(gè)通用型插件,都需要使用嚴(yán)格模式來進(jìn)行開發(fā),但是在使用嚴(yán)格模式開發(fā)時(shí)會(huì)出現(xiàn)一個(gè)問題,工程先后引入兩個(gè)文件file1.js和file2.js,file1.js使用的嚴(yán)格模式進(jìn)行開發(fā),file2是非嚴(yán)格模式,那么下面的代碼會(huì)出問題。

真值運(yùn)算
JavaScript中的邏輯運(yùn)算if、||和&&理論上是可以接受任何值的,因?yàn)镴avaScript中
所有類型都會(huì)在邏輯運(yùn)算中轉(zhuǎn)換成布爾值

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

由于數(shù)字和字符串可能為假值,所以,使用針織運(yùn)算檢查函數(shù)參數(shù)或者對(duì)象屬性是否已經(jīng)存在不是絕對(duì)安全的。

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

原始類型優(yōu)于封裝類型

JavaScript對(duì)象擁有六個(gè)原始值基本類型: 布爾值,數(shù)字,字符串,null,undefined和對(duì)象。

需要注意的是,使用typeof對(duì)null判斷得到的結(jié)果是"object",ECMAScript標(biāo)準(zhǔn)描述null是一個(gè)獨(dú)特的類型

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

總體來講,一般不需要使用封裝類型來代替基本類型,因?yàn)榛绢愋蜔o論是從聲明還是使用都較為方便。而且,基本類型本身是沒有任何方法的,不過可以隱式轉(zhuǎn)換成String對(duì)象來執(zhí)行其內(nèi)部方法:

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

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

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

對(duì)JavaScript原始類型值設(shè)置屬性是沒有意義的

避免對(duì)回合類型使用 == 運(yùn)算符

由于JavaScript隱式轉(zhuǎn)換的存在,因此,在使用 == 運(yùn)算符的時(shí)候,有時(shí)候可能不會(huì)得到我們所預(yù)期的結(jié)果。

"1.0e0" == { valueOf: function(){ return true } };
//結(jié)果是true,因?yàn)橛覀?cè)valueOf結(jié)果是true,會(huì)被隱式轉(zhuǎn)換成數(shù)字1,根據(jù)隱式轉(zhuǎn)換法則,左側(cè)字符串也會(huì)被隱式轉(zhuǎn)換成1,因此比較是相等的。
// 使用==運(yùn)算符比較時(shí)一些特殊情況
null == undefined;//true,這種情況永遠(yuǎn)是true
null/undefined ==
string/number/boolean;//false,這種情況永遠(yuǎn)是false
string/number/boolean == string/number/boolean;// 將原始類型轉(zhuǎn)換為數(shù)字進(jìn)行比較
string/number/boolean == Date對(duì)象;// 先將原始類型轉(zhuǎn)化成數(shù)字,再將date類型轉(zhuǎn)化成原始類型(優(yōu)先嘗試toString,其次嘗試valueOf)
string/number/boolean == 非Date對(duì)象;// 先將原始類型轉(zhuǎn)化成數(shù)字,再將date類型轉(zhuǎn)化成原始類型(優(yōu)先嘗試valueOf,其次嘗試toString)

// 關(guān)于Date對(duì)象比較問題

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

這是因?yàn)镈ate對(duì)象調(diào)用toString方法之后轉(zhuǎn)換的不是我們所熟知的字符串形式。

在瀏覽器中調(diào)用date.toString(),結(jié)果是"Sun Jul 11 1993 00:00:00 GMT+0800 (中國標(biāo)準(zhǔn)時(shí)間)"

//將Date類型字符串轉(zhuǎn)換成我們定義格式的字符串
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"

在比較的時(shí)候,最好使用嚴(yán)格相等運(yùn)算符 ===,這是一個(gè)良好的習(xí)慣

了解分號(hào)插入的局限

JavaScript語法對(duì)于分號(hào)沒有硬性的規(guī)定,其語言機(jī)制自身會(huì)自動(dòng)添加分號(hào)而區(qū)分開語句,了解分號(hào)插入的規(guī)則,對(duì)于提高JavaScript代碼的嚴(yán)謹(jǐn)性有著巨大的幫助。

分好僅在 } 標(biāo)記之前、一個(gè)或多個(gè)換行符之后和程序的輸入結(jié)尾被插入

換而言之,我們只可以在一行、一個(gè)代碼塊和一段程序結(jié)束的地方省略分號(hào),其他任何地方省略分好都有可能出現(xiàn)錯(cuò)誤。

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

換句話說,分好是JavaScript為我們提供的一種錯(cuò)誤校正機(jī)制

a = b
(f());
// 上面這段代碼會(huì)被解析成
a = b(f());//這是一條合法語句
a = b
f();//下面這段代碼會(huì)被解析成兩條獨(dú)立的語句,因?yàn)?a = b f()是不合法的語句

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

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

return {}; //一條語句,返回一個(gè)空對(duì)象
return 
{}; 
//上面語句等價(jià)于
return ; 
{}
;
也就是會(huì)自動(dòng)在return后面的換行符前插入一個(gè)分號(hào)

另外一種特殊情況就是++運(yùn)算符和--運(yùn)算符

a
++
b;
//會(huì)被解析成
a;
++b;

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

分號(hào)不會(huì)作為分隔符在for循環(huán)空語句的頭部被自動(dòng)插入

也就是說,for循環(huán)體內(nèi)必須顯式的包含分號(hào),否則會(huì)出錯(cuò)

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

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

JavaScript字符串是由16位代碼單元組成,而不是由Unicode代碼點(diǎn)組成

JavaScript使用兩個(gè)代碼單元表示2e16及以上的Unicode代碼點(diǎn)。這兩個(gè)代碼單元被稱為代碼對(duì)。

代理對(duì)甩開了字符串元素計(jì)數(shù),length、charAt、charCodeAt方法以及正則表達(dá)式模式受到了影響

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://m.hztianpu.com/yun/89723.html

相關(guān)文章

  • Effective JavaScript讀書筆記(二)

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

    Yuqi 評(píng)論0 收藏0
  • 讀書筆記:編寫高質(zhì)量javascript的68個(gè)方法

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

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

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

    wapeyang 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

zhoutao

|高級(jí)講師

TA的文章

閱讀更多
最新活動(dòng)
閱讀需要支付1元查看
<