编写高质量代码:改善JavaScript的188个建议

作用域控制着变量与参数的可见性和生命周期。减少了命名冲突,并提供了自动内存管理。

JavaScript支持函数作用域,定义在函数中的参数和变量在函数外部是不可见的,并且在一个函数中的任何位置定义的变量在该函数中的任何地方都可见。JavaScript缺少块级作用域,最好的做法是在函数体的顶部声明函数中可能用到的所有变量。

constructor属性,该属性值引用的是原来构造该对象的函数。

检测数据类型

1.typeof

typeof只能检测一下六种类型:

  • number
  • string
  • boolean
  • object
  • function
  • undefined
    注意:使用typeof检测null,返回值为“object”,而不是“null",所以判断null时,应使用如下方法:
function(o) {
  return (o==="null") ? "null" : (typeof o);
}
2.对象或数组

可以使用constructor属性,该属性值引用的是原来构造该对象的函数。使用constructor可以判断绝大部分数据的类型。但是null和undefined不能使用该方法,JavaScript解释器会抛出异常。此时需要把值转换为布尔值,如果为true,则说明不是undefined和null,然后再调用constructor属性。

var val = undefined;
console.log(typeof val);                      
console.log(val || val.constructor);
//undefined
//undefined

null相同
3.toString()

使用toString()方法检测对象类型是最安全、最准确地。调用toString()方法把对象转换为字符串,然后通过检测字符串中是否包含数组所特有的标志字符可以确定对象的类型。toString()方法返回的字符串形式如下:

[object class]

object表示对象的通用类型,class表示对象的内部类型。

你可能感兴趣的:(编写高质量代码:改善JavaScript的188个建议)