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();
js中属性点.和中括号[]的关系。的更多相关文章
- js中对象与函数的关系
首先什么是对象?根据W3C上面的解释JS中所有事物都是对象,对象是拥有属性和方法的数据,由此可以看出基本值类型不是对象(number.string.Boolean.Undefined),剩下的引用类型 ...
- JS中ptototype和__proto__的关系
学到原型的时候感觉头都大了/(ㄒoㄒ)/~~ 尤其是ptototype和__proto__ 傻傻分不清 通过多番查找资料,根据自己的理解,总结如下: 一.构造函数: 构造函数:通过new关键字可以用 ...
- js中prototype与__proto__的关系详解
一.构造函数: 构造函数:通过new关键字可以用来创建特定类型的对象的函数.比如像Object和Array,两者属于内置的原生的构造函数,在运行时会自动的出现在执行环境中,可以直接使用.如下: var ...
- js中DOM 节点的一些操作方法
什么是DOM DOM:文档对象模型.DOM 为文档提供了结构化表示,并定义了如何通过脚本来访问文档结构.目的其实就是为了能让js操作html元素而制定的一个规范. DOM就是由节点组成的. 解析过程 ...
- JS中的箭头函数与this
转载自:https://juejin.im/post/5aa1eb056fb9a028b77a66fd#heading-1 JavaScript在ES6语法中新增了箭头函数,相较于传统函数,箭头函数不 ...
- 深入理解JS中的对象(一)
目录 一切皆是对象吗? 对象 原型与原型链 构造函数 参考 1.一切皆是对象吗? 首先,"在 JavaScript 中,一切皆是对象"这种表述是不完全正确的. JavaScript ...
- Js中Prototype、__proto__、Constructor、Object、Function关系介绍
一. Prototype.__proto__与Object.Function关系介绍 Function.Object:都是Js自带的函数对象.prototype,每一个函数对象都有一个显式的proto ...
- js 中中括号,大括号使用详解
一.{ } 大括号,表示定义一个对象,大部分情况下要有成对的属性和值,或是函数.如:var LangShen = {"Name":"Langshen",&quo ...
- js中__proto__和prototype的区别和关系?
_proto__(隐式原型)与prototype(显式原型)1.是什么 显式原型 explicit prototype property: 每一个函数在创建之后都会拥有一个名为prototype的属性 ...
随机推荐
- ADC采样对MIC的干扰
使用EFM8SB的MCU做ADC采样,检测MIC Bias的电源,解码android耳机的线控.初始时, ADC的采样频率2KHz, 在录音时后播放,能固定的听到接近2K的一个噪声.示波器探测不到明显 ...
- PNG文件格式详解
源文件地址:https://blog.mythsman.com/2015/12/08/1/ 最近在看隐写术的时候经常需要研究图片文件的二进制文档格式,那么这就很有必要了解我们的图片文件究竟是如何保存的 ...
- VS2017调试闪退之Chrome
巨硬build后发了15.7.1满载期待的升级了..结果NM泪奔................... 为啥 泪奔? 使用Chrome 调试闪退,MMP ,一想肯定是VS的锅咯,各种抓头发.. 试试看 ...
- flask框架----flask中的wtforms使用
一.简单介绍flask中的wtforms WTForms是一个支持多个web框架的form组件,主要用于对用户请求数据进行验证. 安装: pip3 install wtforms 二.简单使用wtfo ...
- webpack处理媒体文件(图片/视频和音频)
webpack最终会将各个模块打包成一个文件,因此我们样式中的url路径是相对入口html页面的, 这个问题是用file-loader解决的,file-loader可以解析项目中的url引入(不仅限于 ...
- Spring MVC 编程流程步骤
Spring MVC 编程流程步骤 1. 建立Maven工程 2. 添加Spring MVC依赖 <dependencies> <dependency> <groupId ...
- makefile 双冒号规则
双冒号规则就是使用“::”代替普通规则的“:”得到的规则.当同一个文件作为多个规则的目标时,双冒号规则的处理和普通规则的处理过程完全不同(双冒号规则允许在多个规则中为同一个目标指定不同的重建目标的命令 ...
- corn
http://www.cnblogs.com/itech/archive/2011/02/09/1950226.html service crond start ---查看crontab服务是否启动 ...
- linux检查系统CPU,内存,磁盘使用率
#!/bin/bash CPU=`top -bn 1 -i -c | sed -n '3p' | awk -F ':' '{print$2}' | awk '{print$1}'` MEM=`free ...
- phpstorm 一个窗口打开多个项目
参考:https://imshusheng.com/php/135.html 文件 -> 设置 -> 项目"XXX" -> Directories- > A ...