菜单

js中typeof的用法汇总澳门太阳集团:

2020年3月13日 - 新闻中心

1、作用:

JavaScript中的typeof其实极度复杂,它能够用来做过多业务,但同期也可以有数不清蹊跷的表现.本文列举出了它的多个用法,何况还建议了留存的难题以致缓和办法.

typeof 运算符重回三个用来表示表达式的数据类型的字符串。
也许的字符串有:”number”、”string”、”boolean”、”object”、”function” 和
“undefined”。

2、常用再次来到值表明

    > typeof undefined
    ‘undefined’
    > typeof null // well-known bug
澳门太阳集团,    ‘object’
    > typeof true
    ‘boolean’
    > typeof 123
    ‘number’
    > typeof “abc”
    ‘string’
    > typeof function() {}
    ‘function’
    > typeof {}
    ‘object’
    > typeof []
    ‘object’
    > typeof unknownVariable
    ‘undefined’

表达式 返回值 typeof undefined ‘undefined’ typeof null ‘object’ typeof
true ‘boolean’ typeof 123 ‘number’ typeof “abc” ‘string’ typeof
function() {} ‘function’ typeof {} ‘object’ typeof [] ‘object’ typeof
unknownVariable ‘undefined’

1.反省一个变量是还是不是存在,是还是不是有值. typeof在二种状态下会回来”undefined”:三个变量未有被声称的时候,和一个变量的值是undefined的时候.举个例子:

留意:类型再次回到值都以字符串、并且都以小写打头

> typeof undeclaredVariable === “undefined” true > var
declaredVariable; > typeof declaredVariable ‘undefined’ > typeof
undefined ‘undefined’
还也可以有其余事办公室法检验有个别值是还是不是是undefined:

3、常规应用:

> var value = undefined; > value === undefined true
但这种办法即便运用在贰个未表明的变量上的时候,就能够抛出特别,因为唯有typeof才方可健检评定未证明的变量的同期还不报错:

1).检查多个变量是不是存在,是或不是有值.

> undeclaredVariable === undefined ReferenceError: undeclaredVariable
is not defined
小心:未开头化的变量,未有被传出参数的形参,不设有的品质,都不会鬼使神差上边的难题,因为它们总是可访问的,值总是undefined:

typeof在两种状态下会回到”undefined”:三个变量未有被声称的时候,和多个变量的值是undefined的时候.举例:

> var declaredVariable; > declaredVariable === undefined true >
(function (x) { return x === undefined }()) true > ({}).foo ===
undefined true
翻译注:由此,若是想检验一个大概未有被声称的全局变量是或不是存在,也能够利用
if(window.maybeUndeclaredVariableState of Qatar{}

> typeof undeclaredVariable === “undefined” true

题材: typeof在形成这么的天职时显得很繁琐.

> var declaredVariable;

消除办法:
那样的操作不是很布满,所以有人觉的没要求再找更加好的覆灭办法了.不过也会有人会建议三个专程的操作符:

> typeof declaredVariable ‘undefined’

> defined undeclaredVariable false > var declaredVariable; >
defined declaredVariable false
或许,也可以有人还亟需三个检查测量检验变量是还是不是被声称的操作符:

> typeof undefined ‘undefined’还也许有别的措施行检查测有个别值是不是是undefined:

> declared undeclaredVariable false > var declaredVariable; >
declared declaredVariable true
翻译注:在perl里,下面的defined操作符相当于defined(卡塔尔,上面包车型大巴declared操作符也正是exists(卡塔尔国,

> var value = undefined;

2.决断三个值不等于undefined也不对等null 主题材料:假使您想检查测验三个值是还是不是被定义过(值不是undefined亦非null卡塔尔,那么你就碰见了typeof最著名的叁个旷古未有表现(被感到是八个bugState of Qatar:typeof
null再次来到了”object”:

> value === undefined true
但这种方法要是选拔在一个未申明的变量上的时候,就能够抛出极度,因为唯有typeof才得以健康检验未注明的变量的还要还不报错:

> typeof null ‘object’
翻译注:那只好算得最先的JavaScript完结的bug,而今天专门的学业就是那般规范的.V8曾经校正并达成过typeof
null ===
“null”,但最终证实不可行.

> undeclaredVariable === undefined ReferenceError: undeclaredVariable
is not defined
注意:未起初化的变量,没有被传播参数的形参,不设有的习性,都不会现身上面的题目,因为它们连接可访谈的,值总是undefined:

搞定办法: 不要使用typeof来做那项职务,用上面那样的函数来顶替:

> var declaredVariable;

function isDefined(x) { return x !== null && x !== undefined; }
另多少个大概是引进三个“私下认可值运算符”,在myValue未定义的动静下,下边包车型客车表明式会回到defaultValue:

> declaredVariable === undefined true

myValue ?? defaultValue
地点的表明式等价于:

> { return x === undefined }.foo === undefined true
注:所以,若是想检查测试叁个可能没有被声称的全局变量是还是不是留存,也得以动用
if(window.maybeUndeclaredVariableState of Qatar{}

(myValue !== undefined && myValue !== null) ? myValue : defaultValue
又或者:

问题: typeof在变成如此的天职时显得很繁琐.

myValue ??= defaultValue
实际上是上面那条语句的简化:

解决办法:
那样的操作不是很广阔,所以有人觉的没要求再找越来越好的消除办法了.可是也有人会建议叁个特意的操作符:

myValue = myValue ?? defaultValue
当您拜谒叁个嵌套的性子时,举例bar,你也许会供给那些运算符的支持:

> defined undeclaredVariable false

obj.foo.bar
例如obj大概obj.foo是未定义的,上边的表明式会抛出相当.二个运算符.??能够让地方的表明式在遍历一层一层的性质时,重临第四个碰着的值为undefined或null的习性:

> var declaredVariable;

obj.??foo.??bar
地点的表明式等价于:

> defined declaredVariable false
只怕,也可以有人还需求叁个检查评定变量是还是不是被声称的操作符:

(obj === undefined || obj === null) ? obj : (obj.foo === undefined ||
obj.foo === null) ? obj.foo : obj.foo.bar

> declared undeclaredVariable false

3.区分对象值和原始值 下边包车型客车函数用来质量评定x是不是是二个对象值:

> var declaredVariable;

function isObject(x) { return (typeof x === “function” || (typeof x ===
“object” && x !== null)); }
主题素材:
上面的检查实验相比较复杂,是因为typeof把函数和对象看成是例外的项目,并且typeof
null重返”object”.

> declared declaredVariable true
译者注:在perl里,下边包车型大巴defined操作符相当于defined(卡塔尔(قطر‎,上面的declared操作符相当于exists(State of Qatar,

杀绝办法: 上面包车型客车不二秘籍也平时用来检验对象值:

2.肯定一个值不等于undefined也不等于null

function isObject2(x) { return x === Object(x); }
警告:你恐怕感到这里可以利用instanceof
Object来检查评定,但是instanceof是透过利用应用二个指标的原型来判断实例关系的,那么未有原型的对象咋做吧:

标题:如若您想检查测量检验多少个值是还是不是被定义过,那么你就遇上了typeof最有名的叁个绝无独有展现:typeof
null重回了”object”:

> var obj = Object.create(null); > Object.getPrototypeOf(obj)
null
obj确实是多少个指标,但它不是任何值的实例:

> typeof null
‘object’注:这必须要算得最早的JavaScript完成的bug,而明天专门的职业正是那样标准的.V8曾经矫正并贯彻过typeof
null ===
“null”,但最终申明不可行.

> typeof obj ‘object’ > obj instanceof Object false
在实质上中,你只怕少之甚少蒙受那样的目的,但它真的存在,何况有它的用项.

解决办法:
不要采纳typeof来做那项职务,用下边那样的诀要来代表:不过变量x必得先行注解,不然会报错。

翻译注:Object.prototype便是三个暗中同意存在的,未有原型的指标

function isDefined { return x !== null && x !== undefined; }

>Object.getPrototypeOf(Object.prototype)null>typeof
Object.prototype’object’>Object.prototype instanceof Object false

另叁个只怕是引进二个“默许值运算符”,在myValue未定义的状态下,上面包车型地铁表明式会回到defaultValue:

4.原始值的品类是如何? typeof是最佳的用来查阅某些原始值的项指标情势.

myValue || defaultValue上边的表明式等价于:

> typeof “abc” ‘string’ > typeof undefined ‘undefined’
标题: 你一定要知道typeof null的奇怪表现.

(myValue !== undefined && myValue !== null) ? myValue : defaultValue

> typeof null // 要小心! ‘object’
化解办法: 上面包车型大巴函数可以修复这些难点(只针对这一个用例卡塔尔(قطر‎.

实际上是底下那条语句的简化:

function getPrimitiveTypeName(x卡塔尔国 { var typeName = typeof x;
switch(typeName卡塔尔(قطر‎ { case “undefined”: case “boolean”: case “number”: case
“string”: return typeName; case “object”: if (x === null卡塔尔 { return
“null”; } default: // 前边的论断都没经过 throw new
TypeError(“参数不是三个原始值: “+x卡塔尔国; } }

myValue = myValue || defaultValue

越来越好的清除办法:
完毕二个函数getTypeName(卡塔尔国,除了能够回到原始值的的项目,还可以再次来到对象值的此中[[Class]]属性.这里讲了何等落到实处这几个函数(译者注:jQuery中的$.type正是这么的兑现卡塔尔(قطر‎

3.区分对象值和原始值

5.某些值是还是不是是函数 typeof能够用来检查评定多少个值是不是是函数.> typeof function (State of Qatar {}
‘function’ >  typeof Object.prototype.toString ‘function’

下边包车型地铁函数用来检查评定x是还是不是是一个对象值:

规范上说,instanceof
Function也能够进行这种需求的检查测量试验.乍一看,貌似写法还进一层文雅.可是,浏览器有三个怪癖:每一个框架和窗口皆有它自身的大局变量.因而,假如你将某些框架中的对象传到另一个框架中,instanceof就无法健康干活了,因为那五个框架有着分歧的协会函数.那正是为啥ECMAScript5中会有Array.isArray(State of Qatar方法的原因.假诺有三个可以看到跨框架的,用于检查一个指标是或不是是给定的布局函数的实例的主意的话,那会很好.上述的getTypeName(卡塔尔国是一个可用的变通方法,但也许还恐怕有多个更素有的解决方案.

function isObject { return (typeof x === “function” || (typeof x ===
“object” && x !== null卡塔尔State of Qatar; } 难题:
上边的检查测试比较复杂,是因为typeof把函数和指标看成是例外的项目,而且typeof
null重临”object”.

6.综述 上面提到的,应该是当下JavaScript中最热切需求的,可以代表部分typeof近日职责的法力特色:

解决办法: 上边包车型客车点子也时时用来检验对象值:

isDefined(卡塔尔国 (例如Object.isDefined(卡塔尔(قطر‎卡塔尔国: 能够用作三个函数可能三个运算符
isObject()
getTypeName()
可以看到跨框架的,检查评定一个对象是或不是是钦赐的构造函数的实例的编制
自己斟酌有些变量是还是不是曾经被声称那样的须要,也许没那么必要有投机的演算符.

function isObject2 { return x === Object; }
警报:你只怕认为这里能够动用instanceof
Object来检查实验,不过instanceof是通过使用使用七个目标的原型来剖断实例关系的,那么未有原型的对象如何是好吧:

> var obj = Object.create;

> Object.getPrototypeOf null obj确实是一个对象,但它不是任何值的实例:

> typeof obj ‘object’

> obj instanceof Object false
在骨子里中,你或许少之又少碰到这么的靶子,但它确实存在,何况有它的用项.

翻译注:Object.prototype就是多少个暗许存在的,没有原型的目的

>Object.getPrototypeOf null

>typeof Object.prototype ‘object’

>Object.prototype instanceof Object false

4.原始值的类型是何等?

typeof是最佳的用来查看有个别原始值的品种的格局.

> typeof “abc” ‘string’

> typeof undefined ‘undefined’难点: 你必须通晓typeof null的古怪表现.

> typeof null // 要小心! ‘object’

解决办法: 上面的函数能够修复那么些难点.

function getPrimitiveTypeName {

var typeName = typeof x;

case “undefined”: case “boolean”: case “number”: case “string”: return
typeName;

case “object”: if { return “null”; }

default: // 前边的判别都没通过 throw new TypeError;

更加好的肃清办法:
完成三个函数getTypeName(卡塔尔,除了能够回到原始值的的门类,仍为能够重返对象值的当中[[Class]]属性.这里讲了哪些促成那几个函数(译者注:jQuery中的$.type正是这么的兑现State of Qatar

5.有些值是不是是函数

typeof能够用来检查评定三个值是或不是是函数.

> typeof function () {} ‘function’

> typeof Object.prototype.toString ‘function’

基准上说,instanceof
Function也得以开展这种须求的检验.乍一看,貌似写法还越来越华贵.可是,浏览器有八个特别:每三个框架和窗口都有它和煦的全局变量.由此,如若您将有个别框架中的对象传到另一个框架中,instanceof就无法平常工作了,因为那七个框架有着分裂的布局函数.那正是怎么ECMAScript5中会有Array.isArray(State of Qatar方法的原因.假如有一个能够跨框架的,用于检查八个指标是不是是给定的布局函数的实例的点子的话,那会很好.上述的getTypeName(卡塔尔国是一个可用的变通方法,但也许还会有多少个更常常有的解决方案.

6.综述

下边提到的,应该是当前JavaScript中最迫切要求的,可以替代部分typeof这段日子任务的职能特色:

isDefined(State of Qatar : 可以当做一个函数只怕四个运算符 isObject
能够跨框架的,检查测量试验一个指标是或不是是钦命的布局函数的实例的体制
检查某些变量是或不是已经被声称那样的要求,大概没那么须求有谈得来的运算符.

如上那篇js中决断变量类型函数typeof的用法计算正是小编分享给我们的全部内容了,希望能给我们多少个参照,也期望我们多多指教脚本之家。

相关文章

发表评论

电子邮件地址不会被公开。 必填项已用*标注

网站地图xml地图