博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
javascript 注意事项汇总
阅读量:5108 次
发布时间:2019-06-13

本文共 1770 字,大约阅读时间需要 5 分钟。

1. 避免生成隐式全局变量:

下面的片段中,a是本地变量但是b确实全局变量,这可能不是你希望发生的:

// 反例,勿使用 function foo() {   var a = b = 0;   // ...}

此现象发生的原因在于这个从右到左的赋值,首先,是赋值表达式b = 0,此情况下b是未声明的。这个表达式的返回值是0,然后这个0就分配给了通过var定义的这个局部变量a。

换句话说,就好比你输入了:

var a = (b = 0);

 

2.  for-in循环应该用在非数组对象的遍历上:

(1) 从技术上将,你可以使用for-in循环数组,但这是不推荐的。因为如果数组对象已被自定义的功能增强,就可能发生逻辑错误。

  另外,在for-in中,属性列表的顺序(序列)是不能保证的。

  所以最好数组使用正常的for循环,对象使用for-in循环。

 

(2) 有个很重要的hasOwnProperty()方法,当遍历对象属性的时候可以过滤掉从原型链上继承下来的属性和方法:

// 对象var man = {   hands: 2,   legs: 2,   heads: 1};// 一个方法添加给了所有对象if (typeof Object.prototype.clone === "undefined") {   Object.prototype.clone = function () {};}// 1.// for-in 循环for (var i in man) {   if (man.hasOwnProperty(i)) { // 过滤      console.log(i, ":", man[i]);   }}/* 控制台显示结果hands : 2legs : 2heads : 1*/// 2.// 反面例子:// for-in loop without checking hasOwnProperty()for (var i in man) {   console.log(i, ":", man[i]);}/*控制台显示结果hands : 2legs : 2heads : 1clone: function()*/

 

 3. parseInt()下的数值转换:

使用parseInt()你可以从字符串中获取数值,当字符串以”0″开头的时候就有可能会出问 题,开头为”0″的字符串被当做8进制处理了,为了避免矛盾和意外的结果,应该总是指定基数参数。

var month = "06",     year = "09";month = parseInt(month, 10);year = parseInt(year, 10);

如果你忽略了基数参数,如parseInt(year),返回的值将是0,因为“09”被当做8进制(好比执行 parseInt( year, 8 )),而09在8进制中不是个有效数字。

替换方法是将字符串转换成数字:

+"08" // 结果是 8Number("08") // 8

 

 4. 函数声明在条件语句内:

   函数声明在条件语句内虽然可以用,但是没有被标准化,也就是说不同的环境可能有不同的执行结果,所以这样情况下,最好使用函数表达式:

// 千万别这样做!  // 因为有的浏览器会返回first的这个function,而有的浏览器返回的却是第二个  if (true) {    function foo() {      return 'first';    }  } else {    function foo() {      return 'second';    }  }  foo();  // 相反,这样情况,我们要用函数表达式  var foo;  if (true) {    foo = function() { //典型的赋值表达式      return 'first';    };  } else {    foo = function() {      return 'second';    };  }  foo();

 

 

转载于:https://www.cnblogs.com/langtao/archive/2012/08/17/2643967.html

你可能感兴趣的文章
2013-03-26 星期二
查看>>
Java基础篇——编码注释规范
查看>>
VMware下利用ubuntu13.04建立嵌入式开发环境之二
查看>>
43-正则表达式(1)
查看>>
Long类型 Integer类型 比较相等
查看>>
(5)top k大的数目
查看>>
java基础 01
查看>>
第一次作业
查看>>
Longest Palindromic Substring
查看>>
jQuery插件——Validation Plugin表单验证
查看>>
MyBatis 级联查询一对一与一对多
查看>>
线性筛求素数 (板子
查看>>
Web前端学习笔记:Bootstrap框架
查看>>
collections模块,time&datetime模块.os&sys模块,subprocess模块,random模块,序列化模块(json,pickle)...
查看>>
Spring中使用Velocity模板
查看>>
git客户端命令的常用操作
查看>>
物联网开发之4G通讯模块
查看>>
Python 之数据类型
查看>>
PCA
查看>>
未知USB设备 端口重置失败
查看>>