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检测值的更多相关文章
- JavaScript 检测值
了解常见的真值和假值,可以增强判断能力.在使用if判断时,提升编码速度. 了解常见的检测和存在,一样可以增强判断能力,而且是必须掌握的. 数组和对象被视为真值 1 2 3 4 5 6 7 8 9 10 ...
- JavaScript检测之basevalidate.js
上篇文章「JavaScript检测原始值.引用值.属性」中涉及了大量有用的代码范例,为了让大家更方便的使用这些代码,博主特意把这些代码重新整理并托管到 GitHub,项目地址是:https://git ...
- 用 JavaScript 检测浏览器在线/离线状态(JavaScript API — navigator.onLine)
如今HTML5 移动应用或 Web app 中越来越普遍的使用了离线浏览技术,所以用 JavaScript 检测浏览器在线/离线状态非常常见. 无论浏览器是否在线,navigator.onLine 属 ...
- Javascript检测浏览器对CSS属性的支持 /* supports */
//检测浏览器对CSS属性的支持 supports = (function() { var div = document.createElement('div'), vendors = 'Khtml ...
- JavaScript中值类型和引用类型的区别
JavaScript的数据类型分为两类:原始类型和对象类型.其中,原始类型包括:数字.字符串和布尔值.此外,JavaScript中还有两个特殊的原始值:null和undefined,它们既不是数字也不 ...
- javascript检测当前浏览器是否为微信浏览器
<!DOCTYPE HTML> <html lang="en-US"> <head> <meta charset="UTF-8& ...
- 如何用Javascript检测到所有的IE版本
如何用Javascript检测到所有的IE版本 function GetIEVersion() { var sAgent = window.navigator.userAgent; var Idx = ...
- JavaScript检测数据类型
JavaScript检测数据类型 标签(空格分隔): JavaScript function valType(value) { return Object.prototype.toString.cal ...
- JavaScript里值比较的方法
JavaScript里值比较的方法 参考资料 一张图彻底搞懂JavaScript的==运算 toString()和valueof()方法的区别 Object.is 和 == 与 === 不同 == 运 ...
随机推荐
- jquery虎牙TV3D轮播特效
css部分: *{ margin: 0px; padding: 0px; } body{ margin: 0px; padding: 0px; text-align: center; } #banne ...
- 【WPF】学习笔记(二)——依旧是一个电子签名板
这篇博客呢,主要谈谈在实现电子签名功能中踩过的几个坑:1.System.BadImageFormatException异常:2.无法加载DLL“###.dll”,: 找不到指定的模块. (异常来自 H ...
- C++模板实现动态顺序表(更深层次的深浅拷贝)与基于顺序表的简单栈的实现
前面介绍的模板有关知识大部分都是用顺序表来举例的,现在我们就专门用模板来实现顺序表,其中的很多操作都和之前没有多大区别,只是有几个比较重要的知识点需要做专门的详解. #pragma once #inc ...
- ASP.NET Core开发之HttpContext
ASP.NET Core中的HttpContext开发,在ASP.NET开发中我们总是会经常用到HttpContext. 那么在ASP.NET Core中要如何使用HttpContext呢,下面就来具 ...
- poj1990树状数组
Every year, Farmer John's N (1 <= N <= 20,000) cows attend "MooFest",a social gather ...
- Linux下安装Oracle的两种方式------有图形界面安装和静默安装
本文参考文章 http://blog.csdn.net/zonej/article/details/50680857 http://blog.csdn.net/tongzidane/article/d ...
- css浮动布局,浮动原理,清除(闭合)浮动方法
css浮动 1.什么是浮动:在我们布局的时用到的一种技术,能够方便我们进行布局,通过让元素浮动,我们可以使元素在水平上左右移动,再通过margin属性调整位置 2.浮动的原理:使当前元素脱离普通流,相 ...
- redis 主从配置实例、注意事项、及备份方式
这两天在配置线上使用的redis服务.总得看起来,redis服务的配置文件还是非常简洁.清楚,配置起来非常顺畅,赞一下作者. 下面是我使用的配置,使用主从模式,在master上关掉所有持久化,在sla ...
- Docker - 访问容器
容器具有自己的内部网络和ip地址,具体信息可以查看docker inspect命令结果的"NetworkSettings"部分. 如果想要从外部访问容器中的应用,可以通过docke ...
- MM们,你们为什么要找一个程序猿男票?
前言 免责声明:这篇文章关于什么?六一儿童节马上就要到了,作为一个前端攻城师,自我感觉效率还可以,老早已把任务搞完,页面布局和前端编码高效按时交付,呵呵.趁有时间,写写文章娱乐一下.MM们,请不要拿起 ...