hg888皇冠手机登录

JavaScript 的 typeof 的用途

八月 31st, 2019  |  www.hg888.com

1、作用:

JavaScript中的typeof其实特别复杂,它可以用来做过多业务,但还要也许有比较多奇特的显示.本文列举出了它的多个用法,并且还建议了留存的标题以及缓慢解决办法.

JavaScript中的typeof其实非常复杂,它可以用来做过多事情,但还要也可能有广大稀奇古怪的表现.本文列举出了它的八个用法,并且还提议了留存的标题以及缓慢解决办法.

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 // 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的时候.举个例子:

1.检查一个变量是或不是存在,是不是有值. typeof在二种情况下会重临”undefined”:一个变量未有被声称的时候,和二个变量的值是undefined的时候.比方:

 

注意:类型重回值都以字符串、何况都以小写打头

> typeof undeclaredVariable === “undefined” true > var
declaredVariable; > typeof declaredVariable ‘undefined’ > typeof
undefined ‘undefined’
还可能有任何格局检查实验有些值是还是不是是undefined:

> typeof undeclaredVariable === “undefined” true > var
declaredVariable; > typeof declaredVariable ‘undefined’ > typeof
undefined ‘undefined’
还会有别的措施行检查测有些值是不是是undefined:

自己商酌二个变量是还是不是留存,是不是有值

3、常规应用:

> var value = undefined; > value === undefined true
但这种方法如若利用在三个未注明的变量上的时候,就能抛出拾分,因为独有typeof才干够符合规律检查测试未注解的变量的还要还不报错:

> var value = undefined; > value === undefined true
但这种措施倘使选择在贰个未注脚的变量上的时候,就能够抛出非常,因为独有typeof才足以健康检查实验未注脚的变量的还要还不报错:

typeof在二种情况下会回去 “undefined”:

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

> undeclaredVariable === undefined ReferenceError: undeclaredVariable
is not defined
留神:未初叶化的变量,未有被传播参数的形参,不设有的习性,都不会出现上边的主题素材,因为它们连接可访谈的,值总是undefined:

> 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.maybeUndeclaredVariable){}

> var declaredVariable; > declaredVariable === undefined true >
(function (x) { return x === undefined }()) true > ({}).foo ===
undefined true
翻译注:因而,假设想检验叁个也许未有被声称的全局变量是不是留存,也足以运用
if(window.maybeUndeclaredVariable){}

变量未有被声称

www.hg888.com,> typeof undeclaredVariable === “undefined” true

标题: typeof在完毕如此的任务时展现很繁杂.

标题: typeof在产生这么的职务时展现很繁杂.

 

> var declaredVariable;

消除办法:
这样的操作不是很广泛,所以有人觉的没须求再找更加好的消除办法了.但是也有人会建议贰个特意的操作符:

化解办法:
这样的操作不是很常见,所以有人觉的没要求再找更加好的化解办法了.不过也可以有人会提议八个特意的操作符:

变量的值是 undefined

> typeof declaredVariable ‘undefined’

> defined undeclaredVariable false > var declaredVariable; >
defined declaredVariable false
只怕,也可能有人还索要一个检验变量是不是被声称的操作符:

> 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(),

> declared undeclaredVariable false > var declaredVariable; >
declared declaredVariable true
翻译注:在perl里,上边包车型客车defined操作符也正是defined(),上面的declared操作符也就是exists(),

例如:

> var value = undefined;

2.论断叁个值不等于undefined也不等于null 难题:如若您想检查实验叁个值是或不是被定义过(值不是undefined亦非null),那么您就碰着了typeof最盛名的多个诡异表现(被感到是一个bug):typeof
null再次回到了”object”:

2.确定三个值不等于undefined也不对等null 标题:假使你想检验八个值是或不是被定义过(值不是undefined亦不是null),那么你就遭逢了typeof最知名的二个奇怪表现(被感到是贰个bug):typeof
null重返了”object”:

 

> value === undefined true
但这种办法如果使用在三个未注脚的变量上的时候,就能抛出十一分,因为独有typeof才方可健康检验未注明的变量的同期还不报错:

> typeof null ‘object’
翻译注:那只可以算得最先的JavaScript完成的bug,而现行反革命当内正是这么标准的.V8曾经校正并落到实处过typeof
null ===
“null”,但聊到底证实不可行.

> typeof null ‘object’
翻译注:那不得不算得最早的JavaScript完成的bug,而近日正式便是那样规范的.V8曾经查对并贯彻过typeof
null ===
“null”,但最后表明不可行.

> typeof undeclaredVariable === “undefined”

> undeclaredVariable === undefined ReferenceError: undeclaredVariable
is not defined
留心:未伊始化的变量,未有被传出参数的形参,不设有的属性,都不会出现上边的标题,因为它们连接可访谈的,值总是undefined:

化解办法: 不要采纳typeof来做那项义务,用上边这样的函数来取代:

化解办法: 不要使用typeof来做那项职责,用下边那样的函数来顶替:

true

> var declaredVariable;

function isDefined(x) { return x !== null && x !== undefined; }
另三个也许性是引入二个“暗许值运算符”,在myValue未定义的意况下,下边包车型的士表达式会回去defaultValue:

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

 

> declaredVariable === undefined true

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

myValue ?? defaultValue
上面的表明式等价于:

> var declaredVariable;

> (function (x) { return x === undefined }()) true

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

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

> typeof declaredVariable

> ({}).foo === undefined true
注:就此,假若想检查评定二个恐怕未有被声称的全局变量是或不是留存,也得以采用if(window.maybeUndeclaredVariable){}

myValue ??= defaultValue
实则是下面那条语句的简化:

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

‘undefined’

问题:
typeof在做到如此的任务时显示很繁杂.

myValue = myValue ?? defaultValue
当你拜望一个嵌套的性羊时,比方bar,你大概会须要以此运算符的帮扶:

myValue = myValue ?? defaultValue
当你拜见二个嵌套的特性时,举例bar,你可能会须求这一个运算符的赞助:

 

消除办法:
那样的操作不是很常见,所以有人觉的没须要再找越来越好的消除办法了.不过也会有人会建议四个刻意的操作符:

obj.foo.bar
假定obj可能obj.foo是未定义的,上边的表明式会抛出相当.二个运算符.??能够让地方的表明式在遍历一层一层的本性时,重临第四个际遇的值为undefined或null的属性:

obj.foo.bar
若果obj或然obj.foo是未定义的,上边的表达式会抛出非常.叁个运算符.??能够让地点的表明式在遍历一层一层的性质时,重回第八个遇到的值为undefined或null的习性:

> typeof undefined

> defined undeclaredVariable false

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

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

‘undefined’

> var declaredVariable;

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

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

还大概有其余措施行检查测有个别值是还是不是是 undefined:

> defined declaredVariable false
只怕,也是有人还供给一个检查实验变量是或不是被声称的操作符:

3.区分对象值和原始值 上面包车型大巴函数用来检查实验x是或不是是三个对象值:

3.区分对象值和原始值 上面包车型客车函数用来质量评定x是或不是是一个指标值:

 

> declared undeclaredVariable false

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

function isObject(x) { return (typeof x === “function” || (typeof x ===
“object” && x !== null)); }
主题素材:
上边包车型地铁检查测验相比复杂,是因为typeof把函数和对象看成是见仁见智的花色,何况typeof
null再次来到”object”.

> var value = undefined;

> var declaredVariable;

消除办法: 上边包车型大巴措施也时时用来检查测试对象值:

化解办法: 上面包车型大巴方法也时不经常用来检查评定对象值:

> value === undefined

> declared declaredVariable true
翻译注:在perl里,下边包车型客车defined操作符也正是defined(),上边的declared操作符也正是exists(),

function isObject2(x) { return x === Object(x); }
警告:你恐怕认为这里能够运用instanceof
Object来检查测验,可是instanceof是经过行使应用贰个目的的原型来剖断实例关系的,那么未有原型的靶子怎么做吧:

function isObject2(x) { return x === Object(x); }
提个醒:你大概感到这里能够选用instanceof
Object来检查测量检验,不过instanceof是通过运用应用一个目的的原型来判定实例关系的,那么未有原型的对象如何做呢:

true

2.确定贰个值不等于undefined也不等于null

> var obj = Object.create(null); > Object.getPrototypeOf(obj)
null
obj确实是贰个对象,但它不是任何值的实例:

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

但这种格局若是应用在叁个未注解的变量上的时候,就能够抛出特别,因为独有typeof 手艺够健检实验未证明的变量的还要还不报错:

标题:若是你想检测三个值是还是不是被定义过(值不是undefined亦非null),那么您就遇上了typeof最资深的贰个稀奇表现(被感到是贰个bug):typeof
null重临了”object”:

> typeof obj ‘object’ > obj instanceof Object false
在实质上中,你或者相当少蒙受这么的指标,但它的确存在,并且有它的用途.

> typeof obj ‘object’ > obj instanceof Object false
在实际中,你恐怕很少蒙受那样的靶子,但它真的存在,并且有它的用途.

 

> typeof null ‘object’
注:那只好算得最初的JavaScript完毕的bug,前段时间天专门的学问就是那样标准的.V8曾经考订并完成过typeof
null ===
“null”,但最终证实不可行.

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

翻译注:Object.prototype便是多个私下认可存在的,未有原型的目的

> undeclaredVariable === undefined

化解办法:
不要使用typeof来做那项职责,用上边那样的秘诀来顶替:但是变量x必需事先表明,不然会报错。

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

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

ReferenceError: undeclaredVariable is not defined

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

4.原始值的花色是哪些? typeof是最棒的用来查阅有个别原始值的类别的格局.

4.原始值的类型是何等? typeof是最佳的用来查看有个别原始值的品种的情势.

注意:未开头化的变量,未有被传到参数的形参,空头支票的品质,都不会冒出下面的主题素材,因为它们总是可访问的,值总是
undefined:

另贰个大概是引进一个“暗中同意值运算符”,在myValue未定义的情景下,上边包车型客车表明式会回来defaultValue:

> typeof “abc” ‘string’ > typeof undefined ‘undefined’
难题: 你不能够不领会typeof null的离奇表现.

> typeof “abc” ‘string’ > typeof undefined ‘undefined’
难点: 你必需通晓typeof null的古怪展现.

 

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

> typeof null // 要小心! ‘object’
解决办法: 上面包车型大巴函数能够修复那么些标题(只针对那些用例).

> typeof null // 要小心! ‘object’
化解办法: 上边包车型大巴函数能够修复这一个难题(只针对那几个用例).

> var declaredVariable;

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

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); } }

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); } }

> declaredVariable === undefined

骨子里是上边那条语句的简化:

更加好的化解办法:
完结叁个函数getTypeName(),除了能够回去原始值的的品种,还足以回到对象值的当中[[Class]]属性.这里讲了什么样贯彻那个函数(译者注:jQuery中的$.type便是那样的完毕)

越来越好的化解办法:
达成四个函数getTypeName(),除了能够重返原始值的的品种,还足以回来对象值的中间[[Class]]属性.这里讲了怎么兑现那么些函数(译者注:jQuery中的$.type便是这么的兑现)

true

myValue = myValue || defaultValue

5.有个别值是还是不是是函数 typeof能够用来检查评定一个值是还是不是是函数.> typeof function () {}
‘function’ >  typeof Object.prototype.toString ‘function’

5.某些值是还是不是是函数 typeof能够用来检查测量检验贰个值是还是不是是函数.> typeof function () {}
‘function’ >  typeof Object.prototype.toString ‘function’

 

3.区分对象值和原始值

标准化上说,instanceof
Function也足以张开这种须要的检查评定.乍一看,貌似写法还进一步优雅.然则,浏览器有二个怪癖:每三个框架和窗口都有它本人的大局变量.因而,倘令你将有个别框架中的对象传到另叁个框架中,instanceof就不可能健康办事了,因为这多少个框架有着差别的结构函数.那正是为啥ECMAScript5中会有Array.isArray()方法的原因.如若有七个力所能致跨框架的,用于检查贰个对象是不是是给定的构造函数的实例的主意的话,那会很好.上述的getTypeName()是贰个可用的变通方法,但或者还会有一个更素有的解决方案.

标准上说,instanceof
Function也足以实行这种需求的检查评定.乍一看,貌似写法还特别优雅.可是,浏览器有三个极其:每二个框架和窗口都有它和煦的全局变量.因而,假如您将某些框架中的对象传到另二个框架中,instanceof就不能够符合规律办事了,因为这三个框架有着差异的构造函数.那正是干什么ECMAScript5中会有Array.isArray()方法的原因.假使有一个力所能致跨框架的,用于检查二个指标是不是是给定的构造函数的实例的点子的话,这会很好.上述的getTypeName()是一个可用的变通方法,但或然还应该有一个更常有的应用方案.

> (function (x) { return x === undefined }())

上边包车型大巴函数用来检查测试x是还是不是是一个目的值:

6.综述 上边提到的,应该是眼下JavaScript中最火急供给的,能够代替部分typeof近来任务的遵循特色:

6.综述 上边提到的,应该是时下JavaScript中最急切要求的,可以取代部分typeof近期职责的意义特色:

true

function isObject(x) { return (typeof x === “function” || (typeof x ===
“object” && x !== null)); }
标题:
上边的检查评定相比较复杂,是因为typeof把函数和目的看成是例外的类型,何况typeof
null重临”object”.

isDefined() (例如Object.isDefined()): 可以看做二个函数或然一个运算符
isObject()
getTypeName()
能够跨框架的,检验八个目的是或不是是钦点的构造函数的实例的建制
反省某些变量是不是已经被声称那样的须求,大概没那么须要有和好的运算符.

isDefined() (举例Object.isDefined()): 能够当作二个函数大概二个运算符
isObject()
getTypeName()
能够跨框架的,检查评定三个目的是还是不是是内定的构造函数的实例的建制
反省有个别变量是或不是已经被声称那样的必要,只怕没那么要求有和睦的演算符.

 

解决办法: 上面包车型大巴艺术也每每用来检验对象值:

你只怕感兴趣的小说:

  • 利用typeof方法剖断undefined类型
  • js中决断变量类型函数typeof的用法总括
  • js中推断指标是不是为空的两种完结情势
  • js用typeof方法判定undefined类型
  • js决断是或不是为空和typeof的用法(详解)

> ({}).foo === undefined

function isObject2(x) { return x === Object(x); }
警戒:你只怕以为这里可以应用instanceof
Object来检查评定,不过instanceof是经过应用应用叁个对象的原型来决断实例关系的,那么未有原型的目的如何做吧:

true

> var obj = Object.create(null);

翻译注:因而,若是想检查测量检验一个或者未有被声称的全局变量是不是存在,也得以应用if(window.maybeUndeclaredVariable){}。

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

 

> typeof obj ‘object’

主题材料:typeof 在成功如此的天职时显得很繁杂.

> obj instanceof Object false
在骨子里中,你只怕比比较少境遇这么的靶子,但它真的存在,何况有它的用途.

 

翻译注:Object.prototype便是二个默许存在的,未有原型的对象

化解办法:那样的操作不是很广泛,所以有人觉的没供给再找更好的化解办法了。
可是也可能有人会建议一个特意的操作符:

>Object.getPrototypeOf(Object.prototype) null

 

标签:, ,

Your Comments

近期评论

    功能


    网站地图xml地图