类型未定义。哪个更快更好? [复制]

     2023-03-14     203

关键词:

【中文标题】类型未定义。哪个更快更好? [复制]【英文标题】:typeof undefined. Which is faster and better? [duplicate] 【发布时间】:2014-01-28 22:58:30 【问题描述】:

这里

var a = 

什么时候

if(typeof a.b == "undefined")
  console.log("undefined");


if (!a.b)
  console.log("undefined");

两者都返回"undefined" 以及何时

if(typeof c.b == "undefined")
  console.log("undefined");


if (!c.b)
  console.log("undefined");

两者都引发错误c is not defined

上面的 2 个 if-else 语句看起来是一样的。那么哪种方式更好呢?

【问题讨论】:

【参考方案1】:

如果您正在寻找一种方法来检查成员是否存在,您应该使用in 运算符

if ("b" in a) 
    ...

引发了错误c is not defined,因为c 没有在程序的任何地方定义。

typeof a.b 将返回的是存储在a.b 中的数据类型。如果b 确实存在并且它实际上拥有undefined 的值怎么办? typeof a.b!a.b 都将评估为真值。因此,它们不应该用于成员存在检查。

请查看this answer 了解为什么in 应该是会员存在的首选。

【讨论】:

昨天同样的问题xD @EdgarVillegasAlvarado 是的:P Dup 投票。【参考方案2】:

我会使用in 运算符

if ('b' in a) 
    ...

我会使用它,因为它完全用于检查对象中是否存在属性,并且因为它比其他属性更具可读性 (IMO)。

但是,哪个更快并不重要,因为您会进行微优化(除非您进行数百万或数十亿次操作)。

干杯

PS:c is not defined 发生是因为使用 c.b 您试图访问未定义变量 (c) 的 b 成员

【讨论】:

【参考方案3】:

我不确定您要达到什么目的,但有两个问题。第一部分是检查对象中定义的属性。第一个 if 是检查属性的类型是否已定义,但它可能是故意“未定义”。

用于检查对象是否具有属性。

if(b.hasOwnProperty("c")) 


如果您想“查找”整个原型链中的属性,请使用in

if ("c" in b) 


否则检查 b.c 是“未定义”意味着“b.c”返回的值是“未定义”类型。这并不意味着 b 具有或不具有属性“c”。

第二个块失败了,因为“c”没有在全局范围内定义。您无法访问将导致错误的未定义对象的属性。

注意

如果您没有原型链,hasOwnProperty 在大多数情况下应该更快。

【讨论】:

请记住,这会为对象原型中的属性返回 false。 我已经编辑了答案。

Vector 与 ArrayList 哪个更好? [复制]

...:可能重复:WhyisJavaVectorclassconsideredobsoleteordeprecated?哪种类型更好用以及如何选择合适的类型(内存使用、执行...)?【问题讨论】:【参考方案1】:您通常应该使用Arr 查看详情

使用数组或 List<> 哪个更好? [复制]

...发布时间】:2011-02-2720:38:00【问题描述】:我想知道哪种类型的性能更好,您认为应该使用哪种类型。例如,我有一个字符串列表,不知道我需要多少项,因此使用.Add(String)函数非常方便。我可以随时轻松地将新字符串添加到列... 查看详情

2dsphere vs 2d index:哪个“更好”/更快?

】2dspherevs2dindex:哪个“更好”/更快?【英文标题】:2dspherevs2dindex:whichis"better"/faster?【发布时间】:2014-01-3000:39:08【问题描述】:我有一个数据库,我的文档只有Points。我考虑添加一个地理空间索引。所以我可以从2dsphe... 查看详情

NSPredicate 与 NSString:查找超字符串哪个更好/更快?

】NSPredicate与NSString:查找超字符串哪个更好/更快?【英文标题】:NSPredicateversusNSString:Whichisbetter/fasterforfindingsuperstrings?【发布时间】:2011-06-0102:06:13【问题描述】:我正在搜索大量字符串以查看给定的子字符串是否存在。似乎... 查看详情

PHP,单引号或双引号中哪个更快? [复制]

】PHP,单引号或双引号中哪个更快?[复制]【英文标题】:WhatisfasterinPHP,singleordoublequotes?[duplicate]【发布时间】:2011-06-1918:07:19【问题描述】:可能重复:Isthereaperformancebenefitsinglequotevsdoublequoteinphp?单引号或双引号哪个更快,为什... 查看详情

哪种方法更好/更快的性能 - createElement 或 innerHTML? [复制]

】哪种方法更好/更快的性能-createElement或innerHTML?[复制]【英文标题】:Whichmethodisbetter/fasterforperformance-createElementorinnerHTML?[duplicate]【发布时间】:2017-06-2709:21:24【问题描述】:我正在制作带有几个子元素的div,如下所示:<divc... 查看详情

ArrayList 还是 LinkedList 哪个运行得更快? [复制]

】ArrayList还是LinkedList哪个运行得更快?[复制]【英文标题】:Whichonerunsfaster,ArrayListorLinkedList?[duplicate]【发布时间】:2013-09-1502:16:43【问题描述】:Listli=newLinkedList();for(inti=0;i&lt;100;i++)li.add(i);longstart1=System.nanoTime();li.ge 查看详情

有没有更好更快的方法来使用推力从 CPU 内存复制到 GPU?

】有没有更好更快的方法来使用推力从CPU内存复制到GPU?【英文标题】:isthereabetterandafasterwaytocopyfromCPUmemorytoGPUusingthrust?【发布时间】:2012-03-1112:30:28【问题描述】:最近我一直在使用推力。我注意到,为了使用推力,必须始终... 查看详情

「sap技术」如何看z移动类型是复制哪个标准移动类型而创建的?

【SAP技术】SAPMM如何看一个自定义移动类型是复制哪个标准移动类型而创建的?  比如项目上有一个自定义移动类型Z59,是复制551移动类型而定义的。OMJJ配置界面里,是有一个Ref字段。如下图示,字段值显示为551。但是这... 查看详情

MySQL:在 1:N 关系中哪个更快?加入还是两个查询? [复制]

】MySQL:在1:N关系中哪个更快?加入还是两个查询?[复制]【英文标题】:MySQL:Whichoneisfasterin1:Nrelationships?Joinortwoqueries?[duplicate]【发布时间】:2013-12-3103:48:12【问题描述】:考虑由main_table_id链接的两个表:http://www.zigdigital.com.br/do... 查看详情

哪个更快,array_key_exists 或 array_search? [复制]

】哪个更快,array_key_exists或array_search?[复制]【英文标题】:whichisfaster,array_key_existsorarray_search?[duplicate]【发布时间】:2012-01-1402:52:03【问题描述】:可能重复:What’squickerandbettertodetermineifanarraykeyexistsinPHP?假设我想将我的好友... 查看详情

在性能 Lambda 或简单循环方面哪个更好? [复制]

】在性能Lambda或简单循环方面哪个更好?[复制]【英文标题】:WhichwouldbebetterintermsofperformanceLambdaorsimpleloop?[duplicate]【发布时间】:2015-10-1822:48:55【问题描述】:我已经快速阅读了OracleLambdaExpression文档。不过,这种例子帮助我更... 查看详情

PHP Sessions 或 cookie,哪个更好? [复制]

】PHPSessions或cookie,哪个更好?[复制]【英文标题】:PHPSessionsorcookies,whichisbetter?[duplicate]【发布时间】:2017-05-0316:28:51【问题描述】:我正在阅读有关php中的会话和cookie的信息,但我不知道哪个更好用谁能解释其中的区别?在此... 查看详情

javavspython:哪个未来发展更好?

...用程序开发在许多领域的绝佳选择。  Python是一种动态类型的编程语言,无需声明变量。而Java是一种统计类型的编程语言,其中必须明确声明变量。  即使未列出某些Java“类外壳”,Python代码也太小,这可能是python... 查看详情

性能方面哪个更好:对象原型还是构造函数本机函数? [复制]

】性能方面哪个更好:对象原型还是构造函数本机函数?[复制]【英文标题】:Performancewisewhichisbetter:Anobjectprotypeoranconstructorsnativefunction?[duplicate]【发布时间】:2016-05-1722:45:13【问题描述】:在性能方面什么是更好的做法:创建... 查看详情

数据映射器与数据访问对象。区别。哪个更好? [复制]

】数据映射器与数据访问对象。区别。哪个更好?[复制]【英文标题】:DataMappervsDataaccessobject.Difference.Whichoneisthebetterone?[duplicate]【发布时间】:2012-08-2911:38:42【问题描述】:可能重复:ORM/DAO/DataMapper/ActiveRecord/TableGatewaydifferences?... 查看详情

哪个sql查询更快?

】哪个sql查询更快?【英文标题】:Whichsqlqueryisfaster?【发布时间】:2014-12-2511:29:56【问题描述】:我正在使用postgresql数据库并希望改进查询(第一个)。我将其重写为第二个。但是我读了一篇文章,上面说“NOTIN”是非常缓慢... 查看详情

谁能告诉我强类型和弱类型是啥意思,哪个更好?

】谁能告诉我强类型和弱类型是啥意思,哪个更好?【英文标题】:CansomeonetellmewhatStrongtypingandweaktypingmeansandwhichoneisbetter?谁能告诉我强类型和弱类型是什么意思,哪个更好?【发布时间】:2010-09-2407:29:15【问题描述】:谁能告... 查看详情