JS中关于带操作赋值的一个小问题
2011-06-29 17:28
609 查看
uniqueInteger.counter = 0;//给函数定义一个“静态”变量 function uniqueInteger(){ return uniqueInteger.counter++; } var out; //(1) for(i=0;i<3;i++){ out += uniqueInteger(); }
out=?,你可能第一反应会觉得应该是3,因为调用函数返回的值会自动地转为数值类型,并赋值给out。可是不对劲。因为运行结果是NaN。
带操作运算符
类似于++(暂且也把它归于这里)、+=、-=这样的东西就是带操作运算符。+=的操作数可以是数值型和字符串,而其他的一般都是数值型。
如out += some_num;等价于 out = out + some_num; 可见上而的问题在于当i=0时,out只定义了,没有初始化,它的值为undefined。
而undefined在数值环境下不能像false那样转化为0,相反,它转化为NaN,当它加上一个数值时,还是NaN。所以alert的结果是NaN。
PS:undefined在字符串环境下可以转为"undefined",所以,如果把 “out += uniqueInteger();” 改为“out += ' '+uniqueInteger();“,那么
alert(out)的结果就是”undefined012“;
改后代码如下:
uniqueInteger.counter = 0;//给函数定义一个“静态”变量 function uniqueInteger(){ return uniqueInteger.counter++; } var out; for(i=0;i<3;i++){ out += ' '+uniqueInteger();//前面加上' ',在创造字符环境 } alert(out)
相关文章推荐
- 关于一个js连续赋值问题之我见(词略穷,见谅)
- 关于Objective-C 对象release操作的一个小问题探讨
- 3月题外:关于JS实现图片缩略图效果的一个小问题
- 3月题外:关于JS实现图片缩略图效果的一个小问题
- 一个关于 客户端非法取消正在进行的数据提交操作 的问题 的讨论
- 一个关于js所有函数都报错的问题
- 关于 将一个数组赋值给另外一个数组会重置原来数组的指针 的问题
- 一个关于js函数的传值问题
- 关于一个给二维数组循环赋值问题的本渣研究出的解决办法[C#]
- 今天开发中遇到的一个关于初始化赋值问题
- 今天碰到的一个问题,关于通过基类对象的引用给子类赋值
- js中关于map的增、删、改、查操作及其js中如何建立一个对象
- js 关于操作超链接的一个例子
- 关于动态存储分配函数的调用,在已经过排序的数组中查找及删除内容的操作,余数的分析,删除字符数组中的空格,对链表的逆置,在源字符串中查找子字符串的个数,函数指针以及函数的调用,循环赋值带来的问题以及插入
- 一个关于js函数的传值问题
- JS中关于call()方法的一个问题(转自百度知道,解答非常详细清楚)
- 关于使用js进行表单提交操作引发的表单重复提交问题
- 3月题外:关于JS实现图片缩略图效果的一个小问题
- JS垃圾回收——和其他语言一样,JavaScript 的 GC 策略也无法避免一个问题:GC 时,停止响应其他操作,这是为了安全考虑
- 一个关于js的内存问题