第二章 语法

当 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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容