JS中使用 name 作为变量名出现的问题

今天突然被问到一个问题:我定义了一个数组 var name = ["leon", "jack", "tom"]; ,但是为什么通过下标获取不到正确的值,而且居然能获取到 ,。当时我以为是什么细节问题,仔细检查了一下代码后发现并没有什么问题,甚至开始怀疑JS数组的定义方法,用 var name = new Array("leon", "jack", "tom"); 定义了之后还是出现同样的问题。这下彻底懵了,想了一圈后突然想起来有一次写表单的时候也遇到了类似问题,当时为了获取页面中的 input 标签,而这个 input 是用来输入姓名的,我也就理所当然的在获取的时候这么写了:var name = document.getElementById('idName');,这样没有报错,但是在获取他的 value 值的时候一直是 undefined,即使给他一个初始的 value ,最后获取到的也还是 undefined。而其他的变量都能正常使用,这让我不禁怀疑是变量名的问题,改了变量名之后果然也正常了,当时由于任务也没多想,这个问题也就搁置了,今天有幸又与他见面了。改了数组名之后,果然正常了,这下有必要好好理一下关于 name 变量名的问题了。

定义数组

先看代码

<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8">
        <title></title>
    </head>
    <body>
        <script>
            var name = ["leon", "jack"];
            console.log("name:", name, name.length, typeof name);

            var names = ["leon", "jack"];
            console.log("names:", names, names.length, typeof names);
        </script>
    </body>
</html>

乍一看两个输出的结果应该是一样的,但结果呢?

很明显,以 name 命名的数组变成了字符串。

定义对象
<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8">
        <title></title>
    </head>
    <body>
        <form action="">
            <input id="txt1" type="text" value="txt1">
            <input id="txt2" type="text" value="txt2">
        </form>
        <script>
            var name = document.getElementById('txt1');
            console.log(name.value, typeof name);

            var txt = document.getElementById('txt2');
            console.log(txt.value, typeof txt);

        </script>
    </body>
</html>

6 结果可想而知,用 name 做变量名的变量又变成字符串了。

总结

name 既不是关键字也不是保留字,但他是属性,这也就是问题所在,这样的话其他的属性也不能用作变量名(不是全部,仅仅是一部分,但还是建议不要使用属性做变量名),比如 top 也不行,但是 leftbottom 却可以。另外 locationself 也不可以,而造成这一切的原因是这些变量名是JS的主机变量,永远不能被重新声明。更详细的说明在 这里

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

推荐阅读更多精彩内容

  • 《ijs》速成开发手册3.0 官方用户交流:iApp开发交流(1) 239547050iApp开发交流(2) 10...
    叶染柒丶阅读 5,392评论 0 7
  • 工厂模式类似于现实生活中的工厂可以产生大量相似的商品,去做同样的事情,实现同样的效果;这时候需要使用工厂模式。简单...
    舟渔行舟阅读 7,943评论 2 17
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 135,156评论 19 139
  • SwiftDay011.MySwiftimport UIKitprintln("Hello Swift!")var...
    smile丽语阅读 3,871评论 0 6
  • 将梦搁浅在沙滩上,让海浪一波又一波的淹没,赤脚走在细软的白沙上,一望无际的大海终于成为我倾诉的对象。 ...
    深蓝暖流阅读 373评论 0 0