【发布时间】:2015-12-13 10:41:24
【问题描述】:
我正在编写一个 JS 库,但有两件事在我的脑海中已经有很长一段时间了。
考虑一个选项:
var option = { bool : true } ;
现在,想象一下我会这样做
if(option.bool)
or
if(option.bool === true)
第一种情况,尽管知道它是真假,但我想它相当于:
var tmp = options.bool;
if ( tmp !== undefined && tmp !== null && ( tmp === true || tmp ... )
这意味着要尝试 options.bool = true,它必须在测试 true 之前检查 undefined 和 not null。
因此,后一种情况应该更高效。但是,后一种情况需要更多的字符,如果重复多次,会导致更大的库。
但也许我的理解是不正确的。
现在,即使我这样做:
var bool = window.t ? true : false;
if ( bool === true ) // I still have to check for true to 'have the optmimal version'?
也许最后一种情况可以由编译器优化,但是当它是一个全局选项我想它会有所不同?
请与我分享您对此的看法。
【问题讨论】:
-
如果您真的要询问
if(option.bool)和if(option.bool === true)之间的性能差异,那么所有性能问题的答案都是运行一个代表您特别感兴趣的环境的测试。jsperf是进行此类测试的绝佳工具。没有实际测试结果的推测通常是错误的。 -
@jfriend00 我只想知道我的编码模式应该是什么。我曾经有很多 if ( object ),但后来我将其更改为严格相等,但它总共导致了更多的字符。我不确定对这种性质的简单测试是否能帮助我弄清楚,我想知道什么是好的做法。
-
如果您知道
option.bool仅包含true或false,或者如果您愿意接受任何真实值,那么if (option.bool)是一个非常好的做法。我认为没有理由做if (option.bool === true),除非您认为option.bool可能具有非真/假值,并且您想从if语句中消除任何其他可能的真实值。 -
好的,知道了。例如,可能返回未定义的方法,或者一个和对象 {} 并执行 if ( tmp = method() );如果它未定义,它将立即失败,但如果不是,它将检查它是否是一个字符串并且长度 > 0 .. 一个大于零的数字。这也是另一个问题。
标签: javascript google-chrome firefox