检测原始值用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检测值的更多相关文章

  1. JavaScript 检测值

    了解常见的真值和假值,可以增强判断能力.在使用if判断时,提升编码速度. 了解常见的检测和存在,一样可以增强判断能力,而且是必须掌握的. 数组和对象被视为真值 1 2 3 4 5 6 7 8 9 10 ...

  2. JavaScript检测之basevalidate.js

    上篇文章「JavaScript检测原始值.引用值.属性」中涉及了大量有用的代码范例,为了让大家更方便的使用这些代码,博主特意把这些代码重新整理并托管到 GitHub,项目地址是:https://git ...

  3. 用 JavaScript 检测浏览器在线/离线状态(JavaScript API — navigator.onLine)

    如今HTML5 移动应用或 Web app 中越来越普遍的使用了离线浏览技术,所以用 JavaScript 检测浏览器在线/离线状态非常常见. 无论浏览器是否在线,navigator.onLine 属 ...

  4. Javascript检测浏览器对CSS属性的支持 /* supports */

    //检测浏览器对CSS属性的支持 supports = (function() { var div = document.createElement('div'), vendors = 'Khtml ...

  5. JavaScript中值类型和引用类型的区别

    JavaScript的数据类型分为两类:原始类型和对象类型.其中,原始类型包括:数字.字符串和布尔值.此外,JavaScript中还有两个特殊的原始值:null和undefined,它们既不是数字也不 ...

  6. javascript检测当前浏览器是否为微信浏览器

    <!DOCTYPE HTML> <html lang="en-US"> <head> <meta charset="UTF-8& ...

  7. 如何用Javascript检测到所有的IE版本

    如何用Javascript检测到所有的IE版本 function GetIEVersion() { var sAgent = window.navigator.userAgent; var Idx = ...

  8. JavaScript检测数据类型

    JavaScript检测数据类型 标签(空格分隔): JavaScript function valType(value) { return Object.prototype.toString.cal ...

  9. JavaScript里值比较的方法

    JavaScript里值比较的方法 参考资料 一张图彻底搞懂JavaScript的==运算 toString()和valueof()方法的区别 Object.is 和 == 与 === 不同 == 运 ...

随机推荐

  1. 自定义input默认placeholder样式

    input::input-placeholder { color: #fb4747; } input::-webkit-input-placeholder { color: #fb4747; } in ...

  2. cmd中添加snmpd被控

    在cmd中添加snmpd被控,减少手动操作步骤. net stop sharedaccess reg add HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\s ...

  3. Transform java future into completable future 【将 future 转成 completable future】

    Future is introduced in JDK 1.5 by Doug Lea to represent "the result of an asynchronous computa ...

  4. Lucene5.5.4入门以及基于Lucene实现博客搜索功能

    前言 一直以来个人博客的搜索功能很蹩脚,只是自己简单用数据库的like %keyword%来实现的,所以导致经常搜不到想要找的内容,而且高亮显示.摘要截取等也不好实现,所以决定采用Lucene改写博客 ...

  5. 写具有良好风格的ABAP代码

    编程风格是一个经久不衰的话题,大家所公认的事实是:一个良好的编程风格会带来很多的好处.而对于“良好”的标准,则众说纷纭,莫衷一是.编程风格在ABAP程序中当然也有着重要的意义,因为很少看到专门针对AB ...

  6. 55 Jump Game i && 45 Jump Game ii

    Jump Game Problem statement: Given an array of non-negative integers, you are initially positioned a ...

  7. vlan内部与外部某终端之间的通信

    实现虚拟局域网外部终端与内部终端之间的通信,即实现pc3与pc1和pc4之间的通信. 把交换机上的默认VLAN1改成VLAN2(红色字体命令). 各vlan内部终端的通信,是通过vlan ID来实现的 ...

  8. linux文件系统下的特殊权限

    SUID, SGID, Sticky 1 权限 r, w, x user, group, other 2 安全上下文 前提:进程有属主和属组:文件有属主和属组: (1) 任何一个可执行程序文件能不能启 ...

  9. hdu3555 Bomb 数位DP入门

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3555 简单的数位DP入门题目 思路和hdu2089基本一样 直接贴代码了,代码里有详细的注释 代码: ...

  10. Win10更新补丁失败后出现无法更新正在撤销 解决办法

    系统更新失败,反复重启还是不行,那是不是下载下来的补丁没用了呢??所以我们先要删除Windows更新的缓存文件!在做以下操作之前,首先我们要确认系统内的windows update & BIT ...