• 关于js中的几个小问题。


    问题1:

    使用连续赋值后面的变量会成为全局对象的一个属性,并且这个属性可以通过delete删除。

    原因:赋值语句是从右往左执行的,我们将10赋值给了c,但是c此时还声明,接着把c的返回值赋值给了b,但是b也还没有声明,最后赋值给了a此时a有声明,所以a就是局部变量。

    var a = b = c = 10;
    console.log(delete a); //false
    console.log(delete b); //true
    console.log(delete c); //true

    这样好像看不出来什么太大的关系,但是在函数中就会出现很大的问题。

    function fn(){
        var a = b = c = 10;
    }
    fn();
    
    console.log(b); //10
    console.log(c); //10
    console.log(a); //a is not defined

    此时b和c在全局范围都能够访问,因为b和c成了全局对象window的一个属性。

    问题2:

    如果把数组length事先保存到一个变量中,需要注意的是不管这个数组的长度在这之后是否有改动过,这个变量保存的数组的值依然是事先获取到的长度。

    var arr = [1,2,3],
        i = 0,
        len = arr.length;
    arr.length = 2;
    console.log(len); //3
    console.log(arr.length);  //2

    所以如果在之后有改动这个数组的长度的时候需要重新获取一下,以免出错。

    问题3:

    在js中不能按理说是不能把比较符当做函数的参数传递并且执行的,但是很多时候我们确实需要这样的一个功能,这两天发现一个方法可以实现这个功能。通过eval传递> || < .....

    function fn(a){
        if(eval(10+a+2)){
            console.log(1);
        }
    }
    fn(">") //1

    实现的原理是因为,eval方法会把字符串当做代码来执行,至于使用的场景,由你自己想象。

  • 相关阅读:
    Eclipse中创建标准web工程以及标准目录结构说明
    log4j配置说明
    常用的Eclilpse插件列表以及安装方式总结
    Eclipse插件安装总结
    eclipse中加放js文件报js语法错误解决办法
    如何在Eclipse中配置Tomcat服务器
    webpack的单vue组件(.vue)加载sass配置
    总结自己常用的几种居中方式
    两个正则坑
    CSS拾遗(二)
  • 原文地址:https://www.cnblogs.com/pssp/p/5252076.html
Copyright © 2020-2023  润新知