當(dāng) var 語句被用在函數(shù)內(nèi)部時(shí)衷笋,它定義的是這個(gè)函數(shù)的私有變量
JS的代碼塊不會(huì)創(chuàng)建新的作用域巾腕,因此變量應(yīng)該被定義在函數(shù)的頭部同蜻,而不是代碼塊中疲扎;
下面列出的值被當(dāng)做假(false)
false,
null,
undefined,
空字符串'',
數(shù)字 0 ,
數(shù)字NaN
for in 會(huì)枚舉一個(gè)對(duì)象的所有屬性名(或鍵名)
var obj = {
name: 'aaa',
age: 23,
getName: function(){
alert('11')
},
getAge: function(){
alert(22)
},
sex: undefined
}
for(var i in obj){
console.log(i)
}
結(jié)果是 ==》 name, age, getName, getAge, sex
這時(shí)會(huì)有一個(gè)問題昵时,如果有人在Object原型鏈上定義了一個(gè)屬性,比如:
Object.prototype.getSex = function(){
}
這時(shí)椒丧,再用for in 枚舉下 obj
結(jié)果是 ==> name, age, getName, getAge, sex, getSex
我們會(huì)發(fā)現(xiàn)壹甥,多了一個(gè) getSex;
所以,for in 枚舉對(duì)象屬性會(huì)出現(xiàn)一個(gè)問題壶熏,它會(huì)把對(duì)象原型鏈上的屬性和方法也會(huì)枚舉出來盹廷,而大多數(shù)情況下,我們是不需要原型鏈上的方法的
這時(shí)候久橙,可以用 hasOwnProperty 來確定這個(gè)屬性名是該對(duì)象的成員還是來自于原型鏈
for(var i in obj){
if( obj.hasOwnProperty(i) ){
console.log(i)
}
}
結(jié)果是:name, age, getName, getAge, sex
我們會(huì)發(fā)現(xiàn)俄占,來自于原型鏈上的getSex被過濾掉了;
return 語句會(huì)導(dǎo)致從函數(shù)中提前返回。它也可以指定要被返回的值淆衷。如果沒有指定返回表達(dá)式缸榄,那么返回值就是undefined