您的位置:首页 > Web前端 > JavaScript

Javascript一些语法总结

2016-09-08 13:53 281 查看

!!用法

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.变量名。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: