• 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();
  • 相关阅读:
    动态规划----背包问题
    动态规划----最长公共子序列
    贪心算法---codeforce680D Bear and Tower of Cubes
    贪心算法----Fence Repair(POJ 3253)
    线段树拓展----HDU 6315 Naive Operations
    Saruman`s Army(POJ 3069)
    字典序最小问题 Best Cow Line (POJ 3617)
    RMQ
    牛客2018年第二次acm暑期培训----H-Diff-prime Pairs
    牛客2018年第二次多校培训----A-run
  • 原文地址:https://www.cnblogs.com/daysme/p/6532634.html
Copyright © 2020-2023  润新知