zoukankan      html  css  js  c++  java
  • js中属性点.和中括号[]的关系。

    本来这里说的是 js 执行一个字符串形式函数的方法。

    但是呢看到一个 window['test'] ,居然一下子转不过弯来。这就尴尬了。 

    不是说好了 [] 和 . 其他都是 “什么的什么” 关系吗?如 'window.onload' ,表示 window 的加载事件。

    使用 function fn(){} 定义了一个函数,和使用 var fn=function(){} 相同的呢。 那这里的 fn 就相当于 window 下的变量咯。所以是 window['fn'] 。

    那问题又来了,为什么是加字符串的 ['fn'] 而不是不加字符串的 [fn] 呢? 不加不报错,返回 undefined 。似乎是一个求定义的变量?那 var fn=function(){} 不是定义了么?

    1. 中括号运算符总是能代替点运算符。但点运算符却不一定能全部代替中括号运算符。
    2. 中括号运算符可以用字符串变量的内容作为属性名。点运算符不能。

      看来这里的“可以用”得改为“需要用”了。

    var a=0;
    //undefined
    a
    //0
    window.a
    //0
    window[a]
    //Window {…}
    window['a']
    //0

    3. 中括号运算符可以用纯数字为属性名。点运算符不能。

      这个倒是经常用,使用下标时用。如 arr[0] 。这里不引号 arr[0] 就和加引号的 arr['0'] 相同了。


    4. 中括号运算符可以用js的关键字和保留字作为属性名。点运算符不能。

    window[window]=1
    //1
    window.window=2
    //2
    window[window]
    //1
    window.window
    //Window {}
    window[window]
    //1

    //为什么 window.window=2 都有返回值2了,但 再执行 window.window 时却没有成功?
    //另外 window[window] 输入的值还是 1 ,也就是也没有被第一次的 window.window=2 改变。
    //请问 window.window=2 去哪了?


     下面把本来的 js 执行字符串形式的函数贴一下。下面的 eval 方法好像很多人不喜欢用,据说是因为安全问题。如果是把 JSON 字符串转为对象什么的, JSON.parse(''{"left":100}'') 是经常用的。

    <SCRIPT LANGUAGE="JavaScript"> 
    function test(str){ 
      alert(str); 
    } 
    window['test']('aaaaaaaaaaaaaaaaaaaaa'); 
    </SCRIPT>
    <SCRIPT LANGUAGE="JavaScript"> 
    function test(str){ 
      alert(str); 
    } 
    eval('test("aaaaaaaaaaaaaaaaaaa")'); 
    </SCRIPT>

    再上两个例子。

    function func(a){//定义一个待参数的函数
      alert(a);
    }
    eval('func()');//调用函数不传入参数
    eval('func("bcd")');//调用函数,传入参数
    
    
    var bb = 'function play(){alert("getplay");}';
    var ss = bb;
    var ex = {getplay:eval("("+ss+")")};
    ex.getplay();
  • 相关阅读:
    BZOJ 1051: [HAOI2006]受欢迎的牛( tarjan )
    BZOJ 2208: [Jsoi2010]连通数( DFS )
    js效果-鼠标提示框
    CSS-背景
    CSS-文本
    tomcat 安装 for Mac
    CSS选择器基础
    POJ3349-Snowflake Snow Snowflakes-Hash
    数据库的三大设计范式
    HDU5120-Intersection-两个圆环相交面积
  • 原文地址:https://www.cnblogs.com/daysme/p/6532634.html
Copyright © 2011-2022 走看看