Javascript检测值

检测原始值用typeof

javascript有五种原始类型,分别为字符串、数字、布尔值、null和undefined
判断一个值是什么类型的字符串,可以通过typeof
typeof variable

//检测字符串
if(typeof name == “string”){
    anotherName = name.substring(3);
}

检测引用值(对象)用instanceof

javascript中除了原始值之外的值都是引用,有这样几种内置的引用类型: Object Array Date 和Error,使用typeof判断所有引用类型时都返回object
检测某个引用类型值得最好方法是使用instanceof运算符
value instanceof constructor

//检测日期
if(value instanceof Date){
    console.log(value.getFullYear());
}

检测函数最好的方法是用typeof

检测函数用typeof,因为它可以跨帧(frame)使用,从技术的角度来说,javascript中的函数也是引用类型,同样存在function构造函数每个函数都是其实例

function myFunc(){}
console.log(typeof myFunc === “function”);//true

检测数组用Array.isArray()

开发者发现在instanceof Array在跨域问题帧(frame)之间来回传递数组不总是返回正确的结果

//采用鸭式辩型的方法检测数组
function isArray(value){
    return typeof value.sort === “function”;
}

"鸭式辩型”是作家James Whitcomb Riley 首先提出的概念,即“像鸭子一样走路,游泳并且嘎嘎叫的鸟就是鸭子”,本质上关注“对象能做什么”,而不是关注“对象是什么”
检测数组有很多解决方案,现在ECMAScript5将Array.isArray()正式引入Javascript,唯一的目的就是准确的检测一个值是否为空。IE 9+、FireFox 4+、Safari 5+、Opera 10.5+、Chrome 都实现了Array.isArray()方法。

检测属性使用in运算符

另外一种用到的null以及undefined的场景是当检测一个属性是否在对象中存在是,这个时候判断就会导致错误,判断属性是否存在的最好方法是使用in运算符。比如

var object={
    count:0,
    related:null
};
if(“count” in object){
    //something code
}
if(“related” in object){
    //something code
}

如果只想检查实例对象的某个属性是否存在,则使用hasOwnProperty()方法。

//对于所有非DOM对象来说,这是最好的写法
if(object.hasOwnProperty(“related”)){
    //something code
}
//如果你不确定是否为DOM对象,则可以这样写
if(“hasOwnProperty” in Object && object.hasOwnProperty(‘related’)){
    //something code
}

检测undefined和null用绝对等于===

Undefined类型只有一个值,即undefined。当声明的变量还未被初始化时,变量的默认值为undefined。
Null类型也只有一个值,即null。null用来表示尚未存在的对象,常用来表示函数企图返回一个不存在的对象。

ECMAScript认为undefined是从null派生出来的,所以把它们定义为相等的。但是,如果在一些情况下,我们一定要区分这两个值,那应该怎么办呢?可以使用下面的两种方法。

 
alert(null === undefined); //output "false"  
alert(typeof null == typeof undefined); //output "false"  

使用typeof方法在前面已经讲过,null与undefined的类型是不一样的,所以输出"false"。而===代表绝对等于,在这里null === undefined输出false。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 上周写过一篇读书笔记《编写可维护的JavaScript》之编程实践,其中 第8章 避免『空比较』是博主在工作中遇坑...
    劼哥stone阅读 375评论 0 3
  • 第5章 引用类型(返回首页) 本章内容 使用对象 创建并操作数组 理解基本的JavaScript类型 使用基本类型...
    大学一百阅读 3,272评论 0 4
  • 第三章 基本概念 3.1 语法 ECMAScript标识符一般采用驼峰大小写格式,也就是第一个字母小写,剩下的每个...
    小雄子阅读 593评论 0 1
  • 第一章: JS简介 从当初简单的语言,变成了现在能够处理复杂计算和交互,拥有闭包、匿名函数, 甚至元编程等...
    LaBaby_阅读 1,706评论 0 6
  • 当我感觉思维笨重的像一个胖墩熊一样时,转个弯都吃力而漫长时,我知道也许是时候要做一些改变了 很长一段时...
    芝麻芝小阅读 116评论 0 0