楼主:
xxxx9659 (嘎嘎嘎嘎嘎)
2014-11-11 01:40:35上个月面试一家公司出的 javascript 考题
其中有几题很有趣 列出来跟大家讨论
1. === 跟 == 这两个算子谁比较快?
a. === 快
b. == 快
c. 一样快
d. 不一定 看状况
我写 a
但是后面注解 //有人在管 js 的低阶运算效能吗??!! 根本一样快吧...
后来主管说服我说 == 要多做一次形态转换 所以比较慢
2.
var ary = [];
for(var i = 0; i < 10; ary[i++] = i);
alert(ary); //显示为何?
a. 0,1,2,3,4,5,6,7,8,9
b. 1,2,3,4,5,6,7,8,9,10
c. 语法错误 当掉
d. 不一定 看状况
这题我写 a
但我后面注解 //实际上这是 "未定义行为" 任何后果都有可能 要看js引擎的实作
但是主管很肯定答案是 b
他觉得 i++ 先取值再+1 而且取完值后 一定在中括号内就作完 +1 的动作
3. 写出你有用过的 pattern 跟 framework 并简单介绍
这题我空白...
虽然主管只是想测试我反应 考试答案正不正确不是重点
但是我还是想知道 这几题有没有更好更正统的解释?
作者:
carylorrk (carylorrk)
2014-11-11 14:34:00我的意思是指两个目的一样且预期拿到结果一样的东西才能比较速度。像是在学资料结构,大家都知道 hash map和 rb-tree map 的差别,当你只需要 access 单 element时当然是 hash map 快,但是当你的需要是可以 access单一 elemnt,然后又可以 iterate 整个 map 并拿到排序过的 (key, value) pairs,那显然就是要 tradeoff 了你如果用 hash map,可能就要历遍整个 map 然后再排序同样的,当你预期的结果是 x == null 的话,用 ===你可能需要多次比较 (undefined、NaN 等等)或是explicit 的转型。只有这样的比较才是公平的。== 和 === 虽然相似,但是语义上根本不同。没有限定使用情景就直接问,显然无法直接回答。