判断JavaScript对象是否存在的10个方法,JS判断对象

作者: 计算机网络  发布:2019-12-21

JS推断指标是否存在的10种办法计算

 本篇小说主如果对JS判别目的是或不是留存的10种办法开展了总计介绍,须求的相恋的人能够回复参照他事他说加以考查下,希望对我们具备助于

Javascript语言的布置相当不足严谨,超级多地方一超级大心就能出错。

比喻来讲,请思谋以下境况。

前几日,大家要认清叁个大局对象myObj是还是不是存在,倘若空中楼阁,就对它进行宣示。用自然语言描述的算法如下:

 

 代码如下:

if (myObj不存在){ 

 

    声明myObj; 

 

  }

 

你也许会以为,写出这段代码相当轻巧。不过事实上,它关系的语法难点,远比我们想像的复杂性。Juriy Zaytsev提出,决断三个Javascript对象是还是不是存在,有超越50种写法。唯有对Javascript语言的落到实处细节特别驾驭,才恐怕分得清它们的区分。

 

先是种写法

依附直觉,你恐怕认为能够如此写:

 

 代码如下:

if (!myObj) { 

 

    myObj = { }; 

 

  }

 

可是,运转这段代码,浏览器会一贯抛出ReferenceError错误,招致运转中断。请问错在何地?

对了,if语句剖断myObj是或不是为空时,那一个变量还海市蜃楼,所以才会报错。改成上面那样,就会科学生运动维了。

 代码如下:

if (!myObj) { 

 

    var myObj = { }; 

 

  }

 

为何加了三个var未来,就不报错了?难道这种景色下,if语句做推断时,myObj就早已存在了吗?

要回答这么些主题素材,就必需通晓Javascript解释器的做事方法。Javascript语言是"先深入分析,后运维",拆解解析时就已经到位了变量申明,所以地方的代码实际等同于:

代码如下:

var myObj; 

 

  if (!myObj) { 

 

    var myObj = { }; 

 

  }

 

故而,if语句做决断期,myObj确实已经存在了,所以就不报错了。那正是var命令的"代码提高"(hoisting)功效。Javascript解释器,只"提高"var命令定义的变量,对不利用var命令、直接赋值的变量不起功能,这正是怎么不加var会报错的来头。

 

第三种写法

除去var命令,还足以有另风华正茂种改写,也能拿到准确的结果:

 

代码如下:

if (!window.myObj) { 

 

    myObj = { }; 

 

  }

 

window是javascript的顶层对象,全数的全局变量都以它的属性。所以,剖断myobj是否为空,等同于决断window对象是或不是有myobj属性,那样就足以制止因为myObj未有定义而现身ReferenceError错误。可是,从代码的标准性考虑,最佳依旧对第二行加上var:

代码如下:

    if (!window.myObj) { 

 

        var myObj = { }; 

 

      } 

 

  只怕写成这么: 

 

      if (!window.myObj) { 

 

        window.myObj = { }; 

 

      }

 

其两种写法

地点这种写法的劣点在于,在少数运转条件中(比方V8、Rhino),window未必是顶层对象。所以,思忖改写成:

 代码如下:

if (!this.myObj) { 

 

    this.myObj = { }; 

 

  }

 

在全局变量的框框中,this关键字总是指向顶层变量,所以就能够单独于分化的运转条件。

 

第多样写法

可是,上边那样写可读性非常差,并且this的针对性是可变的,轻便出错,所以进一层改写:

代码如下:

var global = this; 

 

  if (!global.myObj) { 

 

    global.myObj = { }; 

 

  }

 

用自定义变量global表示顶层对象,就知晓多了。

 

第各类写法

还足以采取typeof运算符,判别myObj是或不是有定义。

 

代码如下:

if (typeof myObj == "undefined") { 

 

    var myObj = { }; 

 

  }

 

那是前段时间使用最广大的论断javascript对象是或不是留存的诀窍。

 

第多样写法

出于在已定义、但未赋值的情状下,myObj的值间接等于undefined,所以地点的写法能够简化:

 

代码如下:

if (myObj == undefined) { 

 

    var myObj = { }; 

 

  }

 

此处有三个地方要求小心,首先第二行的var关键字无法少,不然会冒出ReferenceError错误,其次undefined不能够加单引号或双引号,因为那边比较的是undefined这种数据类型,而不是"undefined"那个字符串。

 

第八种写法

地点的写法在"精确比较"(===)的动静下,照旧创制:

 

代码如下:

if (myObj === undefined) { 

 

    var myObj = { }; 

 

  }

 

第二种写法

基于javascript的言语设计,undefined == null,所以相比myObj是不是等于null,也能得到精确结果:

代码如下:

if (myObj == null) { 

 

    var myObj = { }; 

 

  }

 

但是,就算运行结果正确,但是从语义上看,这种论断格局是错的,应该防止。因为null指的是大器晚成度赋值为null的空对象,即那些目的实际是有值的,而undefined指的是官样文章或未有赋值的对象。因而,这里一定要使用"相比运算符"(==),若是这里运用"正确相比运算符"(===),就能出错。

 

第九种写法

还是可以行使in运算符,判定myObj是还是不是为顶层对象的三个属性:

 

 

复制代码 代码如下:

if (!('myObj' in window)) { 

 

    window.myObj = { }; 

 

  }

 

第十种写法

终极,使用hasOwnProperty方法,剖断myObj是不是为顶层对象的壹本性格:

 代码如下:

if (!this.hasOwnProperty('myObj')) { 

 

    this.myObj = { }; 

 

  }

 

总结

  1. 举例只看清目的是不是存在,推荐使用第多样写法。

 

  1. 若果除去对象是还是不是留存,还要判别指标是或不是有null值,推荐使用第生机勃勃种写法。

 

  1. 唯有极其景况,全部变量都应该运用var命令表明。

 

  1. 为了跨平台,建议防止使用window表示顶层对象。

 

5. 在Javascript语言中,null和undefined轻便发生模糊。在或然同时涉嫌互相的图景下,提出接收"准确比较"运算符(===)。

 

本篇随笔首假如对JS剖断目的是否存在的10种办法开展了总括介绍,需求的爱侣能够回复参考下,希望对...

      剖断三个Javascript对象是还是不是留存的方法有成都百货上千,但是唯有对Javascript语言的达成细节极度通晓,才恐怕分得清它们的不同.下边大家后生可畏道来询问一下决断JavaScript对象是还是不是留存的十个方法.
Javascript语言的宏图远远不足严格,超级多地点一一点都不小心就能出错.
比如来说,请酌量以下情状.
今昔,大家要剖断三个大局对象myObj是不是存在,假设不设有,就对它进行注明.用自然语言描述的算法如下:
if (myObj不存在){ 声明myObj; }
您只怕会以为,写出这段代码相当的轻巧.不过实际上,它事关的语法难题,远比大家想像的复杂.Juriy Zaytsev提出,判定贰个Javascript对象是否存在,有超越50种写法.独有对Javascript语言的兑现细节特别领悟,才只怕分得清它们的差距.
率先种写法
听说直觉,你可能感觉能够那样写:
if (!myObj)
{ myObj = { }; }
唯独,运营这段代码,浏览器会平昔抛出ReferenceError错误,招致运营中断.请问错在哪个地方?
对了,if语句决断myObj是或不是为空时,那个变量还海市蜃楼,才会报错.改成上面那样,就会科学生运动营了.
if (!myObj)
{ var myObj = { }; }
干什么加了二个var以后,就不报错了?难道这种气象下,if语句做推断时,myObj就已经存在了啊?
要应对这些标题,就精晓Javascript解释器的行事方式.Javascript语言是"先深入分析,后运维",深入分析时就已经到位了变量申明,上边的代码实际等同于:
var myObj; if (!myObj)
{ var myObj = { }; }
进而,if语句做判按期,myObj确实已经存在了,就不报错了.那正是var命令的"代码进步"(hoisting)效用.Javascript解释器,只"升高"var命令定义的变量,对不应用var命令、直接赋值的变量不起作用,那正是为啥不加var会报错的原因.
其次种写法
除此而外var命令,还足以有另意气风发种改写,也能博取正确的结果:
if (!window.myObj)
{ myObj = { }; }
window是javascript的顶层对象,全部的全局变量都以它的属性.,判别myobj是或不是为空,等同于判定window对象是不是有myobj属性,那样就能够制止myObj未有定义而现身ReferenceError错误.可是,从代码的标准性思索,最棒依旧对第二行加上var:
if (!window.myObj)
{ var myObj = { }; }
要么写成这么:
if (!window.myObj)
{ window.myObj = { }; }
其三种写法
地方这种写法的劣势在于,在少数运转条件中(比方V8、Rhino),window未必是顶层对象.,思量改写成:
if (!this.myObj)
{ this.myObj = { }; }

在全局变量的范畴中,this关键字总是指向顶层变量,就可以独立于差异的周转条件

第各类写法
而是,上面那样写可读性比较糟糕,this的针对是可变的,轻易出错,进一层改写:
var global = this; if (!global.myObj)
{ global.myObj = { }; }
用自定义变量global表示顶层对象,就精通多了.
第八种写法
仍然是能够行使typeof运算符,判别myObj是不是有定义.
if (typeof myObj == "undefined")
{ var myObj = { }; }
那是时下接收最分布的论断javascript对象是不是留存的方法.
第八种写法
在已定义、但未赋值的事态下,myObj的值间接等于undefined,上面的写法能够简化:
if (myObj == undefined)
{ var myObj = { }; }
此处有五个地点需求专一,第二行的var关键字不能够少,不然会并发ReferenceError错误,其次undefined无法加单引号或双引号,这里相比的是undefined这种数据类型,并非"undefined"这几个字符串.
第三种写法
地点的写法在"准确比较"(===)的事态下,照旧创设:
if (myObj === undefined)
{ var myObj = { }; }
第各种写法
依靠javascript的言语设计,undefined == null,比较myObj是不是等于null,也能博得不错结果:
if (myObj == null)
{ var myObj = { }; }
可是,纵然运营结果精确,但是从语义上看,这种推断方法是错的,应该防止.null指的是曾经赋值为null的空对象,即那一个指标实际是有值的,而undefined指的是不真实或还没赋值的对象.因而,这里不能不使用"相比运算符"(==),假若这里运用"准确相比较运算符"(===),就能够出错.
第九种写法
还是可以够行使in运算符,决断myObj是或不是为顶层对象的叁个属性:
if (!('myObj' in window))
{ window.myObj = { }; }
第十种写法 ,使用hasOwnProperty方法,判定myObj是还是不是为顶层对象的多个属性:
if (!this.hasOwnProperty('myObj'))
{ this.myObj = { }; }
总计 1. 万一只看清目的是还是不是留存,推荐使用第四种写法.

  1. 假定除去对象是或不是留存,还要判别指标是或不是有null值,推荐使用第风姿浪漫种写法.
  2. 除非非常情状,全体变量都应当运用var命令注明.
  3. 为了跨平台,建议制止选取window表示顶层对象.
    5. 在Javascript语言中,null和undefined轻松生出混淆.在大概还要提到两岸的景观下,建议采纳"正确相比较"运算符(===). 

 

...

本文由金沙澳门官网送注册58发布于计算机网络,转载请注明出处:判断JavaScript对象是否存在的10个方法,JS判断对象

关键词:

上一篇:3安装配备Vsftpd文件服务器
下一篇:没有了