编写可维护的JavaScript-随笔,六

避免空比较

If(item !== null){

item.sort();

Item.forEach(function(item){

//执行代码

}

}

}

以上判断中item期待的是数组类型的,但是如果item是数值或者字符串的话也会进入if执行条件,只进行和null的比较并不是真正安全的

检测原始值

如果希望一个值是字符串、数字、布尔值、或者undefined,最佳选择是使用typeof运算符,typeof会返回一个表示值的类型的字符串

字符串,typeof返回string

数字,typeof返回number

布尔值,typeof返回boolean

undefined,typeof返回undefined

语法形式:①、typeof variable ②、typeof(variable)

未定义的变量和值为undefined的变量通过typeof都返回undefined

typeof null 返回object

一般不使用null进行检测,除非所期望的值真的是null,应当使用全等与null进行比较

检测引用值

引用值也成为对象,几种引用类型:object、array、date、error

引用对象使用typeof检测返回值都是object

检测某个引用值的类型的最好方法是使用instanceof运算符

基本语法:value instanceof constructor(引用类型)

Instanceof不仅检测这个对象的构造器,还检测原型链,默认情况下,每个对象都继承自object,一次每个对象 value instanceof Object 都返回true

函数和数组一般用不着使用instanceof

检测函数最好的方法是使用typeof返回function

检测数组的最古老的方法是鸭式辨型,通过检测目标变量是否有sort方法

更优雅的解决方案:Object.prototype.toString.call(value) === “[object Array]”

检测属性

当检测一个属性是否在对象中存在时

//不好的写法

If(object[propertyName]){

//一些代码

}

If(object[propertyName] != null){

//一些代码

}

If(object[propertyName] != undefined){

//一些代码

}

以上的写法实际是通过给定的名字检查属性的值,当值为0,空字符串,false,null和undefined时判断就会出现错误。

判断属性是否存在最好的方法是使用in运算符

var object = {

count:0,

related:null

}

//好的写法

if(“count” in object){

//执行的代码

}

如果指向检测实例对象中的某个属性是否存在,则使用hasOwnProperty()方法,实例中存在这个属性则返回true,如果这个属性只存在于原型中则返回false