一、字符串、数字、布尔值、undefined的最佳选择市使用 typeof 运算符进行检测:

  • 对于字符串,typeof 返回"string"
  • 对于数字,typeof 返回"number"
  • 对于布尔值,typeof 返回"boolean"
  • 对于undefined,typeof 返回"undefined"

用法:typoef variable 或 typeof(variable)

二、null 判断

  由于 typeof null 返回的值为 "object"(这是一个被诟病的语言本身设计存在的BUG),我们不能使用 typeof 来对 一个变量值是否为 null 进行判断。此外我们一般不建议将变量与 null 进行比较。

不好的写法:

if( item !== null ) {
// 执行一些逻辑......
}

除非在你能预见该变量有可能等于 null 的情况下,你才可以使用恒等运算符(===)和非恒等运算符(!==)进行比较:

var ele = document,getElementById("box");
if( ele === null ) {
// 执行一些逻辑......
}

三、数组、对象与函数的检测

1. 数组,由于数组属于引用类型,并且使用 typeof 对其进行检测返回的值为"object",在无法使用 typeof 判断的情况下,最佳的解决方案如下:

function isArray( value ) {
if( typeof Array.isArray === "function" ) {
return Array.isArray(value);
} else {
return Object.prototype.toString.call(value) === "[object Array]";
}
}

2. 函数,虽然函数也属于引用类型,但因为 typeof 对函数检测的返回值为"function",因此检测函数的最好方案是使用 typeof :

function func() {}

typeof func === "function" // true

陷阱:在 IE8 及 IE8 以下中使用 typeof 对DOM 节点中的方法检测会返回"object",因此在该场景下的替换方案为:

// IE8及IE8以下
console.log( typeof document.getElementById ); // "object" // 替换方案
if( "getElementById" in document ) {
//执行逻辑......
}

3. 自定义对象和内置对象,由于 typeof 对所有引用类型数据都返回"object"(函数除外),因此我们一般使用 instanceof 来判断其属于哪种引用类型:

(跨frame使用会出现问题,因为每个文档都有各自的内置对象Object、Date、Function等)

var obj = {}
console.log( obj instanceof Object ); // true function Person (name) {
this.name = name
} var person = new Person("Jack");
console.log( person instanceof Person ); // true var time = new Date();
console.log( time instanceof Date ); // true

 

javascript数据类型检测方法的更多相关文章

  1. JavaScript 数据类型检测总结

    JavaScript 数据类型检测总结 原文:https://blog.csdn.net/q3254421/article/details/85483462 在js中,有四种用于检测数据类型的方式,分 ...

  2. Javascript数据类型检测

    Javascript有5种简单数据类型和一种复杂数据类型 基本数据类型:String,Boolean,Number,Undefined, Null 引用数据类型:Object(Array,Date,R ...

  3. javascript 数据类型 -- 检测

    一.前言 在上一篇博文中 Javascript 数据类型 -- 分类 中,我们梳理了 javascript 的基本类型和引用类型,并提到了一些冷知识.大概的知识框架如下: 这篇博文就讲一下在写代码的过 ...

  4. JavaScript: 数据类型检测

    由于JavaScript是门松散类型语言,定义变量时没有类型标识信息,并且在运行期可以动态更改其类型,所以一个变量的类型在运行期是不可预测的,因此,数据类型检测在开发当中就成为一个必须要了解和掌握的知 ...

  5. JavaScript数据类型检测 数组(Array)检测方式

    前言 对于确定某个对象是不是数组,一直是数组的一个经典问题.本文专门将该问题择出来,介绍什么才是正确的javascript数组检测方式 typeof 首先,使用最常用的类型检测工具--typeof运算 ...

  6. JavaScript数据类型检测详解

    //JS该如何检测数据的类型呢? //使用关键字: typeof //输出结果依次为:'number','string','boolean'. console.log(typeof 17); cons ...

  7. javascript 中检测数据类型的方法

    typeof 检测数据类型 javascript 中检测数据类型有好几种,其中最简单的一种是 typeof 方式.typeof 方法返回的结果是一个字符串.typeof 的用法如下: typeof v ...

  8. JavaScript系列文章:不能不看的数据类型检测

    由于JavaScript是门松散类型语言,定义变量时没有类型标识信息,并且在运行期可以动态更改其类型,所以一个变量的类型在运行期是不可预测的,因此,数据类型检测在开发当中就成为一个必须要了解和掌握的知 ...

  9. 建议2:注意Javascript数据类型的特殊性---(3)正确检测数据类型

    使用typeof预算符返回一个用于识别其运算数类型的字符串.对于任何变量来说,使用typeof预算符总是以字符串的形式返回一下6种类型之一 number string boolean object f ...

随机推荐

  1. PHP正则经典漏洞

    @author: Dlive P牛在小密圈中发的一个有关使用PHP正则配合写配置文件导致Getshell的经典漏洞 漏洞代码是这样的: <?php //ph.php $str = addslas ...

  2. html——零散知识点

    1.form表单中的button  form表单中,正常应该提交数据的是type="submit"   2. html5的文件读取方法FileReader()     3.inpu ...

  3. C/C++里的const(1)

    首先来看这样一段程序: #include<iostream> using namespace std; int main(){ char *s = "hello world&qu ...

  4. 【反演复习计划】【bzoj3994】约数个数和

    首先要用数学归纳证明一个结论,不过因为我实在是懒得打公式了... 先发代码吧. #include<bits/stdc++.h> #define N 50005 using namespac ...

  5. import详解

    试想一下 在工作中今年在一个项目中可能会导入某一个目录下的模块文件,那这个时候怎么样才能让Python解释器能够找到该模块进行调用呢? - 将这个模块拷贝一份到当前使用目录下. 这种方式让模块太冗余 ...

  6. selenium 截图 添加时间戳

    在自动化程序中运行的代码报错信息或者是相关日志有可能并无法直观的判断出错信息.因此截图是避免不了的.为了避免因为重复运行或者是图片名称相同导致截图被覆盖. 建议在截图时使用时间戳,保证截图图片名称的唯 ...

  7. opencv mat

    mat基础教程: http://blog.csdn.net/sinat_31802439/article/details/50083291 mat 初始化: Mat M(,,CV_32FC1); Ma ...

  8. MATLAB中的符号运算

    1.      syms命令 可以替换sym和symfun,另外可以定义符号变量的类型,如 syms x positive; 限定x为正数. 若要取消这个限定,则可以用命令 syms x clear; ...

  9. Centos7重置root密码的方法(亲测有效)

    CentOS 7的更新还是非常大的,很多平时使用的命令已经变化了,要上手还真要一段时间.比如忘记root密码.在5.6的系统中直接进入单用户模式下,一个passwd命令修改,重启即可.但是在Cento ...

  10. Tomcat 服务器基本知识

    Tomcat下载安装和配置  下载         下载地址: http://tomcat.apache.org        tomcat服务器分为很多版本, 其中包括windows版和linux版 ...