摘要:数据类型判断有的时候需要判断数据类型,应对各种复杂的逻辑判断,先来个咱们最常用的。操作符返回一个字符串,并表示该变量的类型。运算符用于测试构造函数的属性是否出现在对象的原型链中的任何位置通俗点说就是一个变量是否某个对象的实例。
JS数据类型判断
有的时候需要判断数据类型,应对各种复杂的逻辑判断,先来个咱们最常用的。
1.typeoftypeof操作符返回一个字符串,并表示该变量的类型。
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; // 返回 false3.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
摘要:最近开始看源码,并将源码解读放在了我的计划中。今天就跟大家聊一聊中一些常用类型检查方法,以及一些工具类的判断方法。用是否含有属性来判断工具类判断方法接下来看下一些常用的工具类判断方法。 Why underscore 最近开始看 underscore.js 源码,并将 underscore.js 源码解读 放在了我的 2016 计划中。 阅读一些著名框架类库的源码,就好像和一个个大师对话...
摘要:内置函数和对象中内置了一些函数和对象,很多语言都会有内置的方法,直接可以调用开发。根据语法标准提供的内置函数包括和。注意基础语法提供的内置函数和方法只有这些,像那是浏览器提供给我们的。强制类型转换大家应该都知道。 js基础 - 变量 *大家对js一定不会陌生,入门很简单(普通入门),很多人通过网络资源、书籍、课堂等很多途径学习js,但是有些js基础的只是往往被大家遗漏,本章就从js变量...
摘要:内置函数和对象中内置了一些函数和对象,很多语言都会有内置的方法,直接可以调用开发。根据语法标准提供的内置函数包括和。注意基础语法提供的内置函数和方法只有这些,像那是浏览器提供给我们的。强制类型转换大家应该都知道。 js基础 - 变量 *大家对js一定不会陌生,入门很简单(普通入门),很多人通过网络资源、书籍、课堂等很多途径学习js,但是有些js基础的只是往往被大家遗漏,本章就从js变量...
摘要:所以我们又可以得出一个结论原型的属性指向构造函数,构造函数又通过属性指回原型,但是并不是所有函数都具有这个属性,就没有这个属性。 1.原始类型 boolean number string null undefined symbol原始类型储存的都是值,是没有函数可以调用的,undefined.toString() 显示报错,但是1.toString() // 1 ; 是因为1被强制转...
阅读 2966·2021-09-28 09:42
阅读 3374·2021-09-22 15:21
阅读 1092·2021-07-29 13:50
阅读 3438·2019-08-30 15:56
阅读 3341·2019-08-30 15:54
阅读 1166·2019-08-30 13:12
阅读 1108·2019-08-29 17:03
阅读 1140·2019-08-29 10:59