资讯专栏INFORMATION COLUMN

JS类型判断

yvonne / 2742人阅读

摘要:数据类型判断有的时候需要判断数据类型,应对各种复杂的逻辑判断,先来个咱们最常用的。操作符返回一个字符串,并表示该变量的类型。运算符用于测试构造函数的属性是否出现在对象的原型链中的任何位置通俗点说就是一个变量是否某个对象的实例。

JS数据类型判断

有的时候需要判断数据类型,应对各种复杂的逻辑判断,先来个咱们最常用的。

1.typeof

typeof操作符返回一个字符串,并表示该变量的类型。

typeof oper / typeof (operand)
var testString = "adus",
    testArray = [],
    testBoolean = true,
    testNumber = 0,
    testObject = {},
    testNull = null,
    testUndefined = undefined
    
console.log(typeof testString);//string
console.log(typeof testArray);//object
console.log(typeof testBoolean);//boolean
console.log(typeof testNumber);//number
console.log(typeof testObjec);//object
console.log(typeof testNull);//object
console.log(typeof testUndefined);//undefined

当然不只有上面的这些基础类型,还有下面这些:

Symbol (ECMAScript 6 新增)    "symbol"

宿主对象(由JS环境提供)    Implementation-dependent

函数对象([[Call]] 在ECMA-262条款中实现了)    "function"

咦?有点不对,为什么数组、null等都是object呢???请往下看

Function或者Array这些类型的实例的时候,其实都是基于Object实例进行的一种扩展。只是多了一些特有属性。 

在 JavaScript 最初的实现中,JavaScript 中的值是由一个表示类型的标签和实际数据值表示的。对象的类型标签是 0。

由于 null 代表的是 空指针(大多数平台下值为 0x00)。

因此,null的类型标签也成为了 0,typeof null就错误的返回了"object"。(reference)

2.instanceof

instanceof运算符用于测试构造函数的prototype属性是否出现在对象的原型链中的任何位置,通俗点说就是一个变量是否某个对象的实例。

object instanceof constructor

object 要检测的对象 / constructor 构造函数

function fnc(){}
var newFnc = new fnc();
console.log(newFnc.__proto__ == fnc.prototype);//true
console.log( newFnc instanceof fnc ) //true


/*String对象和Date对象都属于Object类型和一些特殊情况*/

var simpleStr = "This is a simple string"; 
var myString  = new String();
var newStr    = new String("String created with constructor");
var myDate    = new Date();
var myObj     = {};
var myNonObj  = Object.create(null);

simpleStr instanceof String; // 返回 false, 检查原型链会找到 undefined
myString  instanceof String; // 返回 true
newStr    instanceof String; // 返回 true
myString  instanceof Object; // 返回 true

myObj instanceof Object;    // 返回 true, 尽管原型没有定义
({})  instanceof Object;    // 返回 true, 同上
myNonObj instanceof Object; // 返回 false, 一种创建对象的方法,这种方法创建的对象不是Object的一个实例

myString instanceof Date; //返回 false

myDate instanceof Date;     // 返回 true
myDate instanceof Object;   // 返回 true
myDate instanceof String;   // 返回 false
3.Object.prototype.toString()

每个对象都有一个toString()方法,当该对象被表示为一个文本值时,或者一个对象以预期的字符串方式引用时自动调用。默认情况下,toString()方法被每个Object对象继承。如果此方法在自定义对象中未被覆盖,toString() 返回 "[object type]",其中type是对象的类型。

Function.prototype.call( thisArg ) / Function.prototype.apply( thisArg )

传递要检查的对象作为第一个参数,称为thisArg。

var toString = Object.prototype.toString;

toString.call(new Date); // [object Date]
toString.call(new String); // [object String]
toString.call(Math); // [object Math]

//Since JavaScript 1.8.5
toString.call(undefined); // [object Undefined]
toString.call(null); // [object Null]

在合适的场景用恰当的方法,会很省心,也能保证代码的简洁、健壮。

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/102615.html

相关文章

  • 【underscore.js 源码解读】常用类型判断以及一些有用的工具方法

    摘要:最近开始看源码,并将源码解读放在了我的计划中。今天就跟大家聊一聊中一些常用类型检查方法,以及一些工具类的判断方法。用是否含有属性来判断工具类判断方法接下来看下一些常用的工具类判断方法。 Why underscore 最近开始看 underscore.js 源码,并将 underscore.js 源码解读 放在了我的 2016 计划中。 阅读一些著名框架类库的源码,就好像和一个个大师对话...

    tanglijun 评论0 收藏0
  • js笔记内容

    摘要:定义运算符用来判断一个构造函数的属性所指向的对象是否存在另外一个要检测对象的原型链上,用于引用类型。但其实,实例的来自于构造函数的。 一、关于css 样式优先级: 行内样式>id选择器样式>类选择器样式>标签选择器样式>通配符选择器的样式>继承样式>默认样式 二、关于js 关于问题:**JavaScript中的所有事物都是对象??** 从typeof和instanceo...

    n7then 评论0 收藏0
  • Js基础知识(一) - 变量

    摘要:内置函数和对象中内置了一些函数和对象,很多语言都会有内置的方法,直接可以调用开发。根据语法标准提供的内置函数包括和。注意基础语法提供的内置函数和方法只有这些,像那是浏览器提供给我们的。强制类型转换大家应该都知道。 js基础 - 变量 *大家对js一定不会陌生,入门很简单(普通入门),很多人通过网络资源、书籍、课堂等很多途径学习js,但是有些js基础的只是往往被大家遗漏,本章就从js变量...

    leone 评论0 收藏0
  • Js基础知识(一) - 变量

    摘要:内置函数和对象中内置了一些函数和对象,很多语言都会有内置的方法,直接可以调用开发。根据语法标准提供的内置函数包括和。注意基础语法提供的内置函数和方法只有这些,像那是浏览器提供给我们的。强制类型转换大家应该都知道。 js基础 - 变量 *大家对js一定不会陌生,入门很简单(普通入门),很多人通过网络资源、书籍、课堂等很多途径学习js,但是有些js基础的只是往往被大家遗漏,本章就从js变量...

    MageekChiu 评论0 收藏0
  • js

    摘要:所以我们又可以得出一个结论原型的属性指向构造函数,构造函数又通过属性指回原型,但是并不是所有函数都具有这个属性,就没有这个属性。 1.原始类型 boolean number string null undefined symbol原始类型储存的都是值,是没有函数可以调用的,undefined.toString() 显示报错,但是1.toString() // 1 ; 是因为1被强制转...

    pubdreamcc 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<