变量提升
- var name = 'World!';
- (function () {
- if (typeof name === 'undefined') {
- var name = 'Jack';
- console.log('Goodbye ' + name);
- } else {
- console.log('Hello ' + name);
- }
- })();
在 JavaScript中, Fun 和 var 会被提升
相当于
- var name = 'World!';
- (function () {
- var name;
- if (typeof name === 'undefined') {
- name = 'Jack';
- console.log('Goodbye ' + name);
- } else {
- console.log('Hello ' + name);
- }
- })();
巩固一下:
- var str = 'World!';
- (function (name) {
- if (typeof name === 'undefined') {
- var name = 'Jack';
- console.log('Goodbye ' + name);
- } else {
- console.log('Hello ' + name);
- }
- })(str);
- 答案:Hello World 因为name已经变成函数内局部变量
最大整数
- var END = Math.pow(2, 53);
- var START = END – 100;
- var count = 0;
- for (var i = START; i <= END; i++) {
- count++;
- }
- console.log(count);
一个知识点:Infinity
- 在 JS 里, Math.pow(2, 53) == 9007199254740992 是可以表示的最大值. 最大值加一还是最大值. 所以循环不会停.
稀疏数组与密数组
- var ary = [0,1,2];
- ary[10] = 10;
- ary.filter(function(x) { return x === undefined;});
执行结果如何呢?
做这个题目,你需要了解稀疏数组和密集数组
- 译 JavaScript中的稀疏数组与密集数组
- Array/filter
看过源码的同学应该知道,filter源码中,会去判断数组的这个索引值是不是数组的一个属性,有兴趣的同学可以看看我写的这篇关于数组的:[干货👍]从详细操作js数组到浅析v8中array.js
- 0 in ary; => true
- 3 in ary; => false
- 10 in ary; => true
- 也就是说 从 3 – 9 都是没有初始化的'坑'!, 这些索引并不存在与数组中. 在 array 的函数调用的时候是会跳过这些'坑'的.
所以答案就是[]
浮点运算
- var two = 0.2
- var one = 0.1
- var eight = 0.8
- var six = 0.6
- [two – one == one, eight – six == two]
你认为结果是多少呢?面试遇到这个问题,应该怎么回答呢?
- [true,false]
可以看看这些文章:
- 探寻 JavaScript 精度问题以及解决方案
- 从0.1+0.2=0.30000000000000004再看JS中的Number类型
Switch
- function showCase(value) {
- switch(value) {
- case 'A':
- console.log('Case A');
- break;
- case 'B':
- console.log('Case B');
- break;
- case undefined:
- console.log('undefined');
- break;
- default:
- console.log('Do not know!');
- }
- }
- showCase(new String('A'));
运行结果如何呢?