1.下面的值被當(dāng)作假(false)
false
null
undefined
空字符串 ' '
數(shù)字 0
數(shù)字 NaN
2.如果你嘗試檢索一個并不存在的成員屬性的值欲账,降返回undefined轿钠, ||運算符可以用來填充默認(rèn)值
var status = flight.status || 'unknown'
3.嘗試從undefined的成員屬性中取值會導(dǎo)致TypeError異常,這時可以通過&&運算符來避免錯誤
flight.equipment && flight.equipment.model
4.原型
原型連接在更新時時不起作用的涕滋。當(dāng)我們對某個對象做出改變時不會觸及改對象的原型睬辐。
原型只有在檢索值時候才被用到,如果我們嘗試去獲得對象的某個屬性值。但該對象沒有此屬性名,那么Javascript會試著從原型對象中獲取屬性值。如果那個原型對象也沒有該屬性,那么再從它的原型中尋找,以此類推,直到該過程最后到達(dá)終點
object.prototype侵俗。如果想要的屬性完全不存在于原型鏈中,那么結(jié)果就是undefined值,這個過程稱為委托。
原型關(guān)系是一種動態(tài)的關(guān)系,如果我們添加一個新的屬性到原型中,該屬性會基于該原型創(chuàng)建的對象可見丰刊。
stooge.professin=’actor’;
anther_stooge.profession //’actor’
5.hasOwnProperty方法不會檢查原型鏈
6.delete不會觸及原型鏈中的任何對象隘谣。刪除對象的屬性可能會讓來自原型鏈中的屬性透現(xiàn)出來:
another_stooge.nickname // 'Moe'
// 刪除 anther_stooge的nickname屬性,從而暴露出原型的nickname
delete another_stooge.nickname;
another_stooge.nickname // 'Curly'
7.所謂編程就是將一組需求分解成一組函數(shù)與數(shù)據(jù)結(jié)構(gòu)的技能啄巧。
8.函數(shù)對象
每個函數(shù)在創(chuàng)建時會附加兩個隱藏屬性:函數(shù)的上下文和實現(xiàn)函數(shù)行為的代碼。
每個函數(shù)對象在創(chuàng)建時也隨配有一個prototype屬性秩仆。它的值是一個擁有constructor屬性且值即為該函數(shù)的對象。這和隱藏連接到Function.prototype完全不同澄耍。
9.函數(shù)字面量
通過函數(shù)字面量創(chuàng)建的函數(shù)對象包含一個連接到外部上下文的連接噪珊。這被稱為閉包(closure)齐莲。
10.調(diào)用
每個函數(shù)除了聲明時定義的形式參數(shù),每個函數(shù)還接收兩個附加的參數(shù):this和arguments选酗。參數(shù)this的值取決于調(diào)用的模式。在JavaScript中有4種調(diào)用模式:
方法調(diào)用模式
函數(shù)調(diào)用模式
構(gòu)造器調(diào)用模式
apply調(diào)用模式
11.函數(shù)調(diào)用模式
當(dāng)一個函數(shù)并非一個對象的屬性時星掰,那么它就是被當(dāng)做一個函數(shù)來調(diào)用的:
var sum = add(3, 4)
以此模式調(diào)用函數(shù)時嫩舟,this被綁定到全局對象。這是語言設(shè)計上的一個錯誤家厌。倘若語言設(shè)計正確,那么當(dāng)內(nèi)部函數(shù)被調(diào)用時饭于,this應(yīng)該扔然綁定到外部函數(shù)的this變量蜀踏。這個設(shè)計錯誤的后果就是方法不能利用內(nèi)部函數(shù)來幫助它工作,因為內(nèi)部函數(shù)的this被綁定了錯誤的值掰吕,所以不能共享該方法對對象的訪問權(quán)果覆。幸運的是,有一個很容易的解決方案:如果該方法定義一個變量并給它賦值為this殖熟,那么內(nèi)部函數(shù)就可以通過那個變量訪問到this局待。按照約定,我把那個變量命名為that:
// 給myObject增加一個double方法
myObject.double = function () {
var that = this; // 解決方法
var helper = function() {
that.value = add(that.value, that.value)
}
helper(); //以函數(shù)的形式調(diào)用helper。
};
// 以方法的形式調(diào)用double
myObject.double();
document.writeln(myObject.value); // 6
12.apply調(diào)用模式
不是太明白
13.參數(shù)
arguments并不是一個真正的數(shù)組钳榨。它只是一個“類似數(shù)組(array-like)”的對象舰罚。argumengs擁有一個length屬性,但它沒有任何數(shù)組的方法薛耻。
14.返回
一個函數(shù)總是會返回一個值营罢,如果沒有指定返回值,則返回undefined饼齿。如果函數(shù)調(diào)用時在前面加上了new前綴饲漾,且返回值不是一個對象,則返回this(該新對象)
15.閉包
函數(shù)可以訪問它被創(chuàng)建時所處的上下文環(huán)境候醒,這被稱為閉包能颁。
16.級聯(lián)
讓方法返回this而不是undefined,就可以啟用級聯(lián)倒淫。
17.柯里化(哪些場景會用到呢伙菊?)
柯里化允許我們把函數(shù)與傳遞給的參數(shù)相結(jié)合,產(chǎn)生出一個新的函數(shù)敌土。
把多參數(shù)函數(shù)轉(zhuǎn)換為一些列單參數(shù)函數(shù)并進(jìn)行調(diào)用的技術(shù)
17.記憶
函數(shù)可以將先前操作的結(jié)果記錄在某個對象里镜硕,從而避免無謂的重復(fù)運算,這種優(yōu)化被稱為記憶返干。記憶是主要用于加速程序計算的一種優(yōu)化技術(shù)兴枯,它使得函數(shù)避免重復(fù)演算之前已被處理輸入,而返回已緩存的結(jié)果
18.繼承(待繼續(xù)研究)
20.數(shù)組
設(shè)置更大的length不會給數(shù)組分配更多的空間矩欠。而把length設(shè)小將導(dǎo)致所有下標(biāo)大于等于新length的屬性被刪除
21.正則表達(dá)式(待繼續(xù)研究)
可處理正則表達(dá)式的方法有
regexp.exec
regexp.test
string.match
string.replace
string.search
string.split
22.方法
Array
array.concat(item...)
array.join(separator)
array.pop()
array.push(item...)
array.reverse()
array.shift()
array.slice(start, end)
array.sort(comparefn)
array.splice(start, deleteCount,item...)
array.unshift(item...)
Function
function.apply(this.Arg, argArray)
Number
number.toExponential(fractionDigits)
number.toFixed(fractionDigits)
number.toPrecision(precision)
number.toString(radix)
Object
object.hasOwnProperty(name)
RegExp
regexp.exec(string)
regexp.test(string)
String
string.charAt(pos)
string.charCodeAt(pos)
string.concat(string...)
string.indexOf(searchString, position)
string.lastIndexOf(searchString, position)
string.localeCompare(that)
string.match(regexp)
string.replace(searchValue, replaceValue)
string.search(regexp)
string.slice(start, end)
string.split(separator, limit)
string.substring(start, end)
string.toLocaleLowerCase()
string.toLocaleUpperCase()
string.toLowerCase()
string.toUpperCase()
String.fromCharCode(char...)
21.優(yōu)美的特性
函數(shù)式頂級對象
給予原型繼承的動態(tài)對象
對象字面量和數(shù)組字面量
21.毒瘤
全局變量财剖。全局變量在所有作用域中都是可見的變量。
作用域癌淮。有函數(shù)作用域躺坟,沒有塊級作用域。
自動插入分號乳蓄。
typeof null 返回‘object’咪橙。
parseInt最好加上基數(shù),parseInt('08')和parseInt('09')返回0虚倒。
0.1+0.2不等于0.3美侦。
typeof NaN === 'number' // true。
偽數(shù)組