Q1
我们都知道 Javascript 是一个动态型别的语言,必须在执行之后才知道型别
请问以下 a、b、c、d、e 的型别是?
var a = true;var b = 'undefined';var c = 1;var d = null;var e = NaN;console.log(typeof(a));console.log(typeof(b));console.log(typeof(c));console.log(typeof(d));console.log(typeof(e));
A: boolean / string / number / null / number
B: boolean / undefined / number / object / NaN
C: boolean / string / number / object / number
D: boolean / undefined / boolean / object / number
答案: C
补充: NaN 虽然在 JavaScript 代表无效的数字,但是还是归类于数字唷~另外 null 在课程上有讲述到,这是很长久的 bug,所以才会显示 object。
Q2
请问当使用了 new Number()
建立资料后后,此时使用 typeof()
会出现什么型别?
A: array
B: object
C: number
D: string
答案: B
补充: 凡是使用 new 所建构的型别,在 typeof 都会是 object 唷~
Q3
请问下方程式码分别为 true 还是 false?
var a = '10';console.log(10 == this.a);console.log(10 === this.a);
A: true, false
B: false, true
C: true, true
D: false, false
答案: A
补充: 一般来讲,实际开发最好还是使用严格模式来做比较(三个等于)否则很容易出现一些奇怪的 bug
Q4
请问以下答案是什么?
var a = new Object();var b = a;console.log(a === b);
A: true
B: false
C: undefined
D: 以上都不是
答案: A
补充: 这边的观念主要是物件会参考同一个记忆体,所以答案是 true,后面章节会有更详细的介绍。
Q5
请问以下答案是什么?
var a = new Object('1234');var b = BigInt(1234);console.log(a == b);
A: true
B: false
C: NaN
D: undefined
答案: A
补充: 在做宽鬆比较的时候,a 是一个物件格式,但是会被转换成与 BigInt 相同格式
Q6
请问以下程式码会跑哪一个 console.log()?
var a = new Object();if (a) { console.log('程式执行');} else { console.log('程式跑 else');}
A: 程式执行
B: 程式跑 else
C: 都不是
答案: A
补充: 就算透过建构式来建立的物件,一样是会被判定 true,因为物件的记忆体已经存在了。
Q7
请问以下答案是什么?
console.log(10 + 10 - 10 * 2);
A: 0
B: 20
C: 10
D: NaN
答案: A
补充: 依照运算子的 优先度 及 相依性 计算就可以得到计算结果为0。
Q8
请问以下 console.log() 会出现什么答案?
var a = 10;console.log(++a * a);a = 10;console.log(--a * a);
A: 121, 81
B: 110, 90
C: 120, 80
D: 144, 64
答案: A
补充: 因为 ++a 的时候,a + 1 变成 11 所以就是 11 * 11,--a 同理。
Q9
前面章节我们了解 JavaScript 有所谓的 ASI 机制,那么底下程式码是否会出现错误呢?
var a = 10(a + 10).toString();
A: 出现错误
B: 不会出现错误
答案: A
补充: 实际执行得状况会变成 var a = 10(a + 10).toString();
Q10
ASI 的机制各有好坏,其中常见的经典例子就是 return,那么底下程式码是否为正确呢?
var a = 1(function() { console.log(a);}())
A: 出现错误
B: 不会出现错误
答案: A
补充: 这题与上一题类似,之前的文章 也有讲到类似的题型,实际运作时程式码会变成这样var a = 1(function() { console.log(a); })()
以上就是练习的十题,大家可以顺便检视一下自己的学习成果喔!汪汪~