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的属性 ...
随机推荐
- 20165305 苏振龙《Java程序设计》第八周学习总结
第十二章 •如果想在main()以外独立设计流程,可以撰写类操作java.lang.Runnable接口,流程的进入点是操作在run()方法中. •如果想要加装主线程,就要创建 Thread 实例,要 ...
- 高级架构进阶之HashMap源码就该这么学
引言--面试常见的问题 问:“你用过HashMap,你能跟我说说它吗?” “当然用过,HashMap是一种<key,value>的存储结构,能够快速将key的数据put方式存储起来,然后很 ...
- django框架基本介绍
一.mvc和mtv 1.mvc介绍 MVC,全名是Model View Controller,是软件工程中的一种软件架构模式,把软件系统分为三个基本部分:模型(Model).视图(View)和控制器( ...
- JDBC的DBUtils源码
DBUtils源码: package com.it.util; import java.sql.Connection; import java.sql.DriverManager; import ja ...
- usb枚举
源: usb枚举
- Docker学习笔记之常见 Dockerfile 使用技巧
0x00 概述 在掌握 Dockerfile 的基本使用方法后,我们再来了解一些在开发中使用 Dockerfile 的技巧.这一小节的展现方式与之前的略有不同,其主要来自阅读收集和我自身在使用中的最佳 ...
- Baidu WebFE(FEX)团队开发 的 文件上传插件 WebUploader
1.webUploader官网下载地址:http://fex.baidu.com/webuploader/ 直接下载代码,运行examples目录文件即可 2.webUploader上传demo:ht ...
- Kali系列之ettercap欺骗
ettercap在局域网中使用欺骗, 捕获对象浏览器中的图片. 环境 攻击方:kali linux, ip:192.168.137.129 目标方ip:192.168.137.130 路由器:192. ...
- day5-json和pickle序列化
一.json模块 序列化:把一个对象的形态改变一下,使他能够存放在文件中,或者在网络上传输,序列化也叫持久化,是把对象存储到永久介质中,这样就不会因为掉电而丢失. JSON (JavaScript O ...
- Codeforces Round #423 (Div. 2, rated, based on VK Cup Finals) Problem E (Codeforces 828E) - 分块
Everyone knows that DNA strands consist of nucleotides. There are four types of nucleotides: "A ...