今天在网上看到一段代码,如下
代码如下 |
复制代码 |
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就成了对象的一个属性被覆盖了。 |