语法

发布时间:2017-2-27 20:16:34 编辑:www.fx114.net 分享查询网我要评论
本篇文章主要介绍了"语法 ",主要涉及到语法 方面的内容,对于语法 感兴趣的同学可以参考一下。

在代码中,每个代码块和方法都会返回一个值,结果值就如同一个隐式的返回,在函数中,如果没有指定return,那么就相当于在结束出添加一个 return undefined 。在代码块中返回最后一个语句的结果值,如:

var b;        if (true) {            b = 5 + 32;        }

上面的代码中,其返回结果是37,但是想拿到返回值,用这种方法却不行:

    var b;        var a= if (true) {            b = 5 + 32;        }

如果想要拿到其返回值,可以使用eval获取,即:

var b;        var a = eval("if (true) {b = 5 + 32;}");        console.log(a); //37

虽然不是一个好办法,但确实能获取到

()表达式

 var a = 42;        var b = (a++);        console.log(a); //43            console.log(b); //42

由结果可以看出,其实(0本身并不是一个封装表达式。

else if

在JavaScript中,其实是没有else if 语句的,所以我们经常用到的 else if 其实是这样的:

     if (a) {        }        else {            if (b) {            } else {            }        }

函数参数

 function foo(a=42,b=a+1)            {                console.log(arguments.length,a,b,arguments[0],arguments[1])            }            foo(); //0 42 43 undefined undefined            foo(10); //1 10 11 10 undefined            foo(10,undefined); //2 10 11 10 undefined            foo(10,null);//2 10 null 10 null

虽然参数a和b都有默认值,但是函数不带参数时,arguments数组为空。

在来看一个参数绑定的例子:

   function foo(a) {            a = 42;            console.log(arguments[0]);        }        foo(2); //42        foo(); //undefined

由此可以看出,向函数传递参数时,arguments数组中的对应单元会和命名参数建立关联,以得到相同的值,相反,不传递参数就不会建立关联。

需要特别注意的是,它并不是JavaScript语言本身的特性,而是语言引擎底层实现的一个抽象泄露。所以不要同时访问参数和其对应的arguments数组单元。

try finally

finally中的代码总是会再try之后执行,如果有catch则在catch之后执行,即无论什么情况下一定会被调用。如:

 function foo() {            try{                return 42;            }            finally {                console.log("finally");            }            console.log("nerver");        }        console.log(foo());        //finally        //42

这里return 42会先执行,并将foo()函数的返回值设置为42,然后try执行完毕,在执行finally。最后foo执行完毕,执行console.log

如果finally中抛出异常,函数就会在此处种植,如果此前try中已经有return设置了返回值,则该值会被丢弃。

另外还需要注意,如果finally中用return返回了值,那么它会覆盖try 或 catch 返回的值。

switch

switch中的case的匹配算法,是与===相同。但是有时需要通过强制转换来进行比较,即==,这是就需要做一些特殊处理:

 var a = "42";        switch (true) {            case a == 10:                console.log("10");                break;            case a == 42:                console.log("42");                break;        }        //42

尽管可以这样使用,但有一个需要特别注意的地方:

      var a = "42";        var b = "45"        switch (true) {            case (a||b==42):                console.log("10");//永远不会执行到这里                break;        }

因为(a||b==42)的返回结果是42,而非true,所以严格相等比较不成立,这是需要强制转换返回true或false,如 case !!(a||b==42)

全局DOM变量

有时我们在创建有id属性的dom时,也会创建一个同名的全局变量。例如:

<div id="foo"></div>if(type foo==undefind){    foo=42;}console.log(foo) //html元素

上面的代码中,如果稍不注意就会很容易让全局变量的检查错误百出,这有时尽量不要使用全局变量的一个原因。如果必须要用,那么久要保证唯一,不与html和第三方的代码同名。

上一篇:LeetCode 477. Total Hamming Distance
下一篇:linux 常用命令学习记录

相关文章

关键词: 语法

相关评论

本站评论功能暂时取消,后续此功能例行通知。

一、不得利用本站危害国家安全、泄露国家秘密,不得侵犯国家社会集体的和公民的合法权益,不得利用本站制作、复制和传播不法有害信息!

二、互相尊重,对自己的言论和行为负责。