Web 技术研究所

我一直坚信着,Web 将会成为未来应用程序的主流

关于全局常量 undefined、NaN、Infinity

  undefined、NaN、Infinity,是三个全局常量(低版本IE上以变量形式定义),它们不是JavaScript的关键字,所以有可能被作为变量名来使用。虽然通常情况不会有谁手贱去这么做,但是也不能保证没有这样的王八蛋。所以使用这些常量时需要慎重考虑。
  比如下面这个测试代码就把这些名称作为变量来使用了 <script>
(function(){
  var undefined="草",NaN="泥",Infinity="马";
  alert(undefined+NaN+Infinity);
})();
</script>
  这样一来,这个作用域下的子作用域中定义的函数也会受到影响,这时我们需要重新计算这些值。这三个值可以通过简单的字面量计算得到:
    undefined 等价于 void 0
    NaN 等价于 0/0
    Infinity 等价于 1/0
  比如判断函数的某个参数是否为undefined可以这么判断 function test(x){
  if(x===void 0){
    //TODO
  };
  //TODO
};
  也许有人会担心它的性能,其实这些计算的速度是非常快的,可以做这样的测试 <input value="void 0" type="button" />
<input value="0/0" type="button" />
<input value="1/0" type="button" />
<input value="undefined" type="button" />
<input value="NaN" type="button" />
<input value="Infinity" type="button" />
<script>
document.onclick=function(e){
  var test,value=e.target.value;
  if(!value)return;
  var test=window.eval("\
    (function(){\n\
      var i,t=new Date;\n\
      for(var i=0;i<1E8;i++)"+value+";\n\
      return new Date-t;\n\
    })\n\
  ");
  console.log(test()+" <- "+value);
};
</script>

  在一些浏览器上,这些字面量计算值的访问速度由于没有作用域链的干扰,使用起来比全局常量还要快。所以我推荐使用字面量计算值来替代那些毫无保障的全局常量。
网名:
3.84.186.*
电子邮箱:
仅用于接收通知
提交 悄悄的告诉你,Ctrl+Enter 可以提交哦
神奇海螺
[查看全部主题]
各类Web技术问题讨论区
发起新主题
本模块采用即时聊天邮件通知的模式
让钛合金F5成为历史吧!
次碳酸钴的技术博客,文章原创,转载请保留原文链接 ^_^