Javascript一些语法总结

!!用法

    var y = undefined;
    console.log(!y);//true
    var x = false;
    var a = 0;
    var b = null
    var text = !!x;//false
    console.log(test);//false
    console.log(!!a);//false
    console.log(!!b);//false

由于!对于undefined以及0 以及null返回值都是true。但对于!!操作符,就拿上面的例子来说,如果x明确指出了true还是false,那么!!x将返回和x一样的值。否则返回false。
另外,如果x是有内容的,比如x=3,x=[2,1]等。那么!!将返回true。
总结一下:

x结果
布尔值返回x
非undefined、null、0返回true
undefined null 0返回false

with用法

一般的我们Object.property访问类的属性。

    function abcObj(){
        this.name = "张三";
        this.gender = "男";
    }
    var people = new abcObj();//创建一个对象

比如上例中我们通过people.name即可访问属性,但是同时修改很多属性的时候会写起来很烦。因此有with方法

with(people){
    alert(name);//张三
    name="李四";//修改属性
    var name = "123";//特别注意即便用var进行重新赋值也会修改people的name属性
}

但是要注意的是,在with中不能给对象添加属性值。
联系到哦Javascript高级程序设计(第三版)75页的内容,with可以延长作用域链。
书中代码如下

function buildUrl(){
    var qs = "?debug=true";
    with(location){
        var url = href + qs;
    }
    return url;
}

正常来讲,url是在一个代码块中被定义的,return应该无法返回,然而实验结果是可以返回的。原因在于:刚才我们提到了with实际上是引入了一个对象的新的作用域。然而这个作用域中是不能添加新的属性的,因此var实际是定义在更上一层中,因此可以访问到正确的结果。

关于作用域问题。javascript高级程序设计一书中指出。没有块级作用于。有的只是函数级作用域。例如if和for都没有自己的作用域。

if(true){
    var color = "blue";
}
alert(color);//blue
for(var i = 0 ; i < 10 ; i++){
    doSomething(i);
}
console.log(i);//10

for语句创建的i变量仍然存在于外部环境中!这一点要牢记。

声明变量与作用域

一般我们用var声明变量。会自动把变量添加到最近的环境中。在函数内部,最接近的环境就是函数的局部环境。如果没有用var声明变量,变量将被添加到全局变量

我们不建议不声明变量就是用的方法,会导致意外的错误。另外,访问局部变量明显比访问全局变量要快,因此我们建议少使用全局变量。如果要在局部环境中不使用局部变量而使用全局变量,方法是调用window.变量名。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值