zoukankan      html  css  js  c++  java
  • 关于JavaScript中name的意义冲突

        在昨天的《Javascript权威指南》学习笔记之十:ECMAScript 5 增强的对象模型一文中,对于一段代码的调试出现了一个奇怪现象,现将源码贴在以下:

    <script type="text/javascript">
    		function Person(){}
            var per = new Person;
    		Object.defineProperties(per,
    		{
    			"nickName":
    			{
    				value:"Tom",
    				writable:true
    			},
    			"age":
    	   		{
    	   			value:20,
    	   			configurable:false,
    	   			writable:false
    	   		}
    		});
    
    		var o = Object.getOwnPropertyDescriptor(per,"nickName");
    		alert(JSON.stringify(o));
    	</script>

    Google中执行结果:


    这个结果是正确的。可是。改一个地方。结果就不同了

    	<script type="text/javascript">
    		function Person(){}
            var per = new Person;
    		Object.defineProperties(per,
    		{
    			"nickName":
    			{
    				value:"Tom",
    				writable:true
    			},
    			"age":
    	   		{
    	   			value:20,
    	   			configurable:false,
    	   			writable:false
    	   		}
    		});
    
    		var name = Object.getOwnPropertyDescriptor(per,"nickName");
    		alert(JSON.stringify(name));
    	</script>

    执行结果:


    这是为什么呢?就仅仅是改了一个简单的变量名啊

    问题出在了name身上,可是本人出入JS,不懂,在网上找了资料也没有结果,后面就去请教了一个师兄。也把问题放在了论坛上:http://bbs.csdn.net/topics/390799744?

    page=1#post-397474060,


    name是window属性。作用是设置或返回窗体的名字,数据类型是字符串。

    由于第一句是function Person(){}。已经结束了。所以以下的代码可能在全局context中,也就是说你以为alert(JSON.stringify(name));是输出的上面的var name,但实际上可能输出的是window.name。至于输出[Object object],这个类型是name的值的类型。


  • 相关阅读:
    HDU 4644 BWT (KMP)
    常数的值类型问题
    HDU 1395 2^x mod n = 1 (欧拉函数)
    HDU 5384 Danganronpa(AC自动机)
    9.自己实现linux中的tree
    8.底层文件库
    7.标准文件库
    7.gcc的使用
    5.文件I/O
    4.vim操作
  • 原文地址:https://www.cnblogs.com/yutingliuyl/p/6709456.html
Copyright © 2011-2022 走看看