今天在网上看到一段代码,如下
代码如下 | 复制代码 |
copytext console.log(typeof(s)); //function var s = "1111"; function s(){} console.log(typeof(s)); //stringconsole.log(typeof(s)); //function var s = "1111"; function s(){} console.log(typeof(s)); //string |
琢磨了很久,终于想明白了JS中变量对象的问题
第一行输出function,因为当进入作用域后,变量对象会首先扫一遍当然作用域的函数,然后再扫一篇变量,然后存进变量对象,然后再接着开始执行代码。
所以第一行会输出function。
而第四行因为函数是先于变量存入变量对象的,所以在接着的第二行代码s = “1111″,就覆盖了原来的函数变量s,所以输出string
将变量值传入对象时的问题
问题如下:
代码如下 | 复制代码 |
var o = 'left'; var o1 = {drt:'left'}; var o2 = ['left']; var obj = {o:333}; var obj1 = {o1[drt]:333}; var obj2 = {o2[0]:333}; |
代码前三行是变量的几个不同声明方式,即普通变量、对象、数组;后三行分别调用了这3个变量并插入对象。问题来了:
1. 为什么obj1和obj2声明时就直接报错呢?
2. obj没报错,但为什么循环他的属性时,第一个属性直接就叫做“o”,而不是变量o的值"left"呢?
如果我要达到将变量传给对象当属性,将变量值传给对象当属性值的时候,难道只有用:
代码如下 | 复制代码 |
var o1 = {drt:'left'}; var obj3={drt:o1.drt} |
类中变量的赋值问题
Javascript中object.prop和object[prop]赋值的区别。
举一个简单的例子,比如要从stocks中获取出开盘价的信息,组成一个openList对象。实现代码如下
代码如下 | 复制代码 |
var stocks = { '600000': {'name':'浦发银行', 'open':'9.67', 'new':'9.54'}, '600004': {'name':'白云机场', 'open':'6.82', 'new':'6.77'}, '600005': {'name':'武钢股份', 'open':'3.23', 'new':'3.19'}, '600006': {'name':'东风汽车', 'open':'3.96', 'new':'3.86'} }; var openList = { '600000': '9.67', '600004': '6.82', '600005': '3.23', '600006': '3.96' }; var result = {}; var i; //获得开盘价数据对象 for (i in stocks) { //方法1 // result[i] = stocks[i]['open']; //方法2 result.i = stocks[i]['open']; } |
这里方法1,能获取到想要的结果。
但是方法2获取的结果:{i: ”3.96″}。
所以对象.属性,这个属性不能是个变量,像这里的i就成了对象的一个属性被覆盖了。
时间: 2024-10-27 18:36:15