当 var 语句被用在函数内部时,它定义的是这个函数的私有变量
JS的代码块不会创建新的作用域,因此变量应该被定义在函数的头部,而不是代码块中;
下面列出的值被当做假(false)
false,
null,
undefined,
空字符串'',
数字 0 ,
数字NaN
for in 会枚举一个对象的所有属性名(或键名)
var obj = {
name: 'aaa',
age: 23,
getName: function(){
alert('11')
},
getAge: function(){
alert(22)
},
sex: undefined
}
for(var i in obj){
console.log(i)
}
结果是 ==》 name, age, getName, getAge, sex
这时会有一个问题,如果有人在Object原型链上定义了一个属性,比如:
Object.prototype.getSex = function(){
}
这时,再用for in 枚举下 obj
结果是 ==> name, age, getName, getAge, sex, getSex
我们会发现,多了一个 getSex;
所以,for in 枚举对象属性会出现一个问题,它会把对象原型链上的属性和方法也会枚举出来,而大多数情况下,我们是不需要原型链上的方法的
这时候,可以用 hasOwnProperty 来确定这个属性名是该对象的成员还是来自于原型链
for(var i in obj){
if( obj.hasOwnProperty(i) ){
console.log(i)
}
}
结果是:name, age, getName, getAge, sex
我们会发现,来自于原型链上的getSex被过滤掉了;
return 语句会导致从函数中提前返回。它也可以指定要被返回的值。如果没有指定返回表达式,那么返回值就是undefined