幽灵资源网 Design By www.bzswh.com
在存在这么一个变量 tt, 它满足下面的代码.
代码执行完毕后 ,errCount=0 而且 断言函数也从未 alert 信息
代码如下: 
 复制代码 代码如下:<script> 
 var tt=/* 请在这里定义tt */; 
 var errCount=0  //全局变量,用来记录 assert 函数出现断言宣告的次数 
/* 
 断言函数 
 如果v为假,该函数就 alert("assert error"),并累加计数器 errCount 
 如果v为真,就什么也不做 
 */ 
 function assert(v) {  
 if (!v) { 
 alert("assert error"); 
 errCount++; 
 } 
 } 

 assert((tt || true)   == false) 
 assert((tt || false)  == false) 
 assert((tt && true)   == true) 
 assert((tt && false)  == false) 
 assert((true || tt )  == true) 
 assert((tt || true )  == false) 
 assert((false || tt ) == false) 
 assert((tt || false ) == false) 
 assert((true && tt)   == false) 
 assert((tt && true )  == true) 
 assert((false && tt ) == false) 
 assert((tt && false ) == false) 

 assert((tt ? true : false) == true) 
 assert((tt == false)       == true) 
 assert((!tt == tt  )       == true) 
 assert((tt + '')           == "false") 
 assert(tt                  == false) 

  
 alert(errCount)  //结果是打印 0 

 </script>   

同发 CSDN: JavaScript中的魔术变量
这个问题是我一个同事在下班后考我的一个题目.我当时想了很久,也尝试了很久.
得到如下答案,能满足题目的要求.
答案如下:
var tt=new Object(false);
var tt=new Boolean();
var tt=new Boolean(false);
通过这个题目我们足可以感受到js的灵活,更可以加深对js的理解.
我以前经常在代码中使用如下判断
if (a){
  alert('ok')
}
现在看来,这样写的逻辑隐患是非常大的.
借csdn中一个网友的精彩回复来解释一下上面的问题
||是这样运算的:从第一个开始,遇到有意义的返回,否则返回最后一个表达式(注意不一定是Boolean值);
&&是这样运算的:从第一个开始,遇到无意义的返回,否则返回最后一个表达式(注意同上);
!是这样运算的:对表达式的值取非(注意不是对表达式)。
什么是无意义呢:如下六个 0,null,undefined,"",false,NaN
除此,视为有意义。
new Boolean(),new Boolean(false)是同一个东西,由于它是一个对象,故是有意义的,但其值为false,所以,可以看为“有意义的false”,这样,就可以解释所有的问题了。
new Object(false),也是有意义的,其值也为false,只不过其类型为Object,而new Boolean()其类型为Boolean而已。
再提醒一点:||与&&这两个运算符不是对值的运算,即在运算过程中不管表达式的值,而是对表达式本身进行运算;
这两个运算符对表达式究竟如何运算?
答:只管表达式是否有意义,而不管其值几何。
对于表达式,无意义的只有6个;这里要注意:所有以new方式生成的对象为动态对象,动态对象均视为有意义
再举例两个说明:
一、0||false||new Boolean(false)
运算如下:
首先:0是一个常数,刚好是无意义之一,故继续;而false也是无意义之一,故再继续;new Boolean(false)为动态对象,有意义,故上面运算结果为new Boolean(false)
二、0||new Boolean(false)||true
这会是什么结果?很多人不注意就会以为结果为true,但这是不对的。
先说答案:结果同上
首先:0是一个常数,刚好是无意义之一,故继续;new Boolean(false)为动态对象,有意义;这里已经找到有意义的表达式,故不再往下运算了。所以结果同上。
=====
对&&运算符,同理,不再多说。
题外话:
  有意思的是,在答案出来后,我们还采用了一些非常规手段的答这个题(仅供娱乐)

var tt=window["assert"]=new Function();
这句话的意思相当于下面两行代码 
function assert(){} 
function tt(){} 
javascript允许重复定义函数,执行的时候以以后一个为准。
标签:
JavaScript中令你抓狂的魔术变量

幽灵资源网 Design By www.bzswh.com
广告合作:本站广告合作请联系QQ:858582 申请时备注:广告合作(否则不回)
免责声明:本站文章均来自网站采集或用户投稿,网站不提供任何软件下载或自行开发的软件! 如有用户或公司发现本站内容信息存在侵权行为,请邮件告知! 858582#qq.com
幽灵资源网 Design By www.bzswh.com

《魔兽世界》大逃杀!60人新游玩模式《强袭风暴》3月21日上线

暴雪近日发布了《魔兽世界》10.2.6 更新内容,新游玩模式《强袭风暴》即将于3月21 日在亚服上线,届时玩家将前往阿拉希高地展开一场 60 人大逃杀对战。

艾泽拉斯的冒险者已经征服了艾泽拉斯的大地及遥远的彼岸。他们在对抗世界上最致命的敌人时展现出过人的手腕,并且成功阻止终结宇宙等级的威胁。当他们在为即将于《魔兽世界》资料片《地心之战》中来袭的萨拉塔斯势力做战斗准备时,他们还需要在熟悉的阿拉希高地面对一个全新的敌人──那就是彼此。在《巨龙崛起》10.2.6 更新的《强袭风暴》中,玩家将会进入一个全新的海盗主题大逃杀式限时活动,其中包含极高的风险和史诗级的奖励。

《强袭风暴》不是普通的战场,作为一个独立于主游戏之外的活动,玩家可以用大逃杀的风格来体验《魔兽世界》,不分职业、不分装备(除了你在赛局中捡到的),光是技巧和战略的强弱之分就能决定出谁才是能坚持到最后的赢家。本次活动将会开放单人和双人模式,玩家在加入海盗主题的预赛大厅区域前,可以从强袭风暴角色画面新增好友。游玩游戏将可以累计名望轨迹,《巨龙崛起》和《魔兽世界:巫妖王之怒 经典版》的玩家都可以获得奖励。