Open xiaoyu2er opened 8 years ago
44 题 手误了吧?
[ 'hello', 'bye']
@rambo-panda 谢谢 已经修改了!
44道题里面 最她妈烦的就是 42题 Date
对象。 也是唯一栽倒的坑
new Date('2014/3/19'); // 当然只能在v8中解析
new Date('2014-03-19');
// 在v8引擎中 两个结果也不一样。
Date
的坑,太多了。 现在在项目中 nodejs
就用 moment
. 前端工作,尽可能的让后端给时间
@rambo-panda 😄 那很厉害了
mark
第26题
(function(){ var x = y = 1; })(); console.log(y); console.log(x);
这个 X不应该是ERROR,应该返回 function本身
@wh00527 为哈?
(function(){
var x = y = 1;
})();
console.log(y);
console.log(x);
> 1
> Uncaught ReferenceError: x is not defined(…)
凡遇到Date
和正则
全军覆没....
44中14,基础好差。。。 Date全错,正则表达式错大部分。
另外, (function(){ var x = y = 1; })(); console.log(y); console.log(x);
x一定是ERROR,在window里没有x这个属性。
@Yangholmes 是的 y=1, x 在全局找不到
const a = [[[2]]]; toPrimitive(a) => a.toString() => a.join() => [[2]].toString() => [[2]].join() => [2].toString() => [2].join() => '2';
今天做了第二遍 感觉也不难了 原型和继承这块自己还得加深理解
承接上篇 44个 Javascript 变态题解析 (上)
第23题
这个题也还可以.
这个题会让人误以为是
2 > 1 && 2 < 3
其实不是的.这个题等价于
答案是
[true, true]
第24题
这个题我是猜的. 我猜的
true
, 至于为什么.....both objects get converted to strings and in both cases the resulting string is "2"
我不能信服...第25题
这个题也挺逗, 我做对了 :) 答案是
error, '3', error
你如果换一个写法就更费解了
这个答案就是
'3'
;为啥呢?
因为在 js 中
1.1
,1.
,.1
都是合法的数字. 那么在解析3.toString
的时候这个.
到底是属于这个数字还是函数调用呢? 只能是数字, 因为3.
合法啊!第26题
答案是
1, error
y 被赋值到全局. x 是局部变量. 所以打印 x 的时候会报
ReferenceError
第27题
即使正则的字面量一致, 他们也不相等.
答案
false, false
第28题
字面量相等的数组也不相等.
数组在比较大小的时候按照字典序比较
答案
false, false, false, true
第29题
知识点:
只有 Function 拥有一个 prototype 的属性. 所以
a.prototype
为undefined
.而
Object.getPrototypeOf(obj)
返回一个具体对象的原型(该对象的内部[[prototype]]
值)答案
false, true
第30题
f.prototype is the object that will become the parent of any objects created with new f while Object.getPrototypeOf returns the parent in the inheritance hierarchy.
f.prototype 是使用使用 new 创建的 f 实例的原型. 而 Object.getPrototypeOf 是 f 函数的原型.
请看:
答案
false
31
答案
['foo', 'foo']
知识点:
因为函数的名字不可变.
第32题
知识点:
str.replace(regexp|substr, newSubStr|function)
如果replace函数传入的第二个参数是函数, 那么这个函数将接受如下参数
由于题目中的正则没有分组, 所以等价于问
答案:
1, NaN, 3
第33题
先说以下答案
'f', 'Empty', 'function', error
这个答案并不重要.....这里第一小问和第三小问很简单不解释了.
第二小问笔者在自己的浏览器测试的时候是
''
, 第四问是'undefined'
所以应该是平台相关的. 这里明白
parent === Function.prototype
就好了.第34题
知识点:
这里 test 函数会将参数转为字符串.
'nul'
,'undefined'
自然都是全小写了答案:
true, true
第35题
[,,,] => [undefined × 3]
因为javascript 在定义数组的时候允许最后一个元素后跟一个
,
, 所以这是个长度为三的稀疏数组(这是长度为三, 并没有 0, 1, 2三个属性哦)答案:
", , "
第36题
这个题比较流氓.. 因为是浏览器相关,
class
是个保留字(现在是个关键字了)所以答案不重要, 重要的是自己在取属性名称的时候尽量避免保留字. 如果使用的话请加引号
a['class']
第37题
知识点:
简单来说, 如果调用 Date 的构造函数传入一个字符串的话需要符合规范, 即满足 Date.parse 的条件.
另外需要注意的是 如果格式错误 构造函数返回的仍是一个Date 的实例
Invalid Date
.答案
Invalid Date
第38题
我们知道一个function(Function 的实例)的
length
属性就是函数签名的参数个数, 所以 b.length == 0.另外 Function.length 定义为1......
所以不相等.......答案
false
第39题
还是关于Date 的题, 需要注意的是
答案
false, false, false
第40题
知识点:
有趣的是, Math.min 不传参数返回
Infinity
, Math.max 不传参数返回-Infinity
😆答案:
false
第41题
知识点:
通俗的讲
因为第一个正则有一个 g 选项 它会‘记忆’他所匹配的内容, 等匹配后他会从上次匹配的索引继续, 而第二个正则不会
举个例子
所以 a1 = '1'; a2 = '1'; a3 = null; a4 = '2'
答案
[true, false]
第42题
这个....
都是套路!
答案
[false, false]
第43题
知识点:
String.prototype.match 接受一个正则, 如果不是, 按照
new RegExp(obj)
转化. 所以.
并不会转义 那么/gif
就匹配了 /.gif/答案:
'a gif file'
第44题
在两个函数里, a作为参数其实已经声明了, 所以
var a; var a = 'bye'
其实就是a; a ='bye'
所以答案
'hello', 'bye'
全部结束!
总结
由于笔者水平有限, 如果解释有误, 还望指出 😄
通过整理, 笔者发现绝大部分题目都是因为自己对于基础知识或者说某个 API 的参数理解偏差才做错的.
笔者的重灾区在原型那一块, 所以这次被虐和整理还是很有意义呀.
笔者相信 坚实的基础是深入编程的前提. 所以基础书还是要常看啊 🐹
最后这些变态题现在看看还变态嘛?