JavaScript 考題 2

Meow Meow Picture

目錄


型別

  • 六個原始型別以及一個物件型別 (沒有其它了)

JavaScript 的資料型別與資料結構

  • 透過 typeof 查看型別

  • 物件型別可以擴增屬性,原始型別則否。

  • 型別可以動態轉換

    原始型別中的 String, Number, BigInt, Boolean, Symbol
    皆具有包裹物件( 所有方法都可以在裡面查到 )
    Primitive_wrapper_objects_in_JavaScript


測驗:請問結果為?

console.log(typeof []);
  1. object
  2. array

測驗:請問結果為?

function a() {};
console.log(typeof a);
  1. object
  2. function

測驗:請問結果為?

function a() {
this.a = 1;
}
a.a = 2;

console.log(a.a)
  1. 1
  2. 2

測驗:請問結果為?

function a() {
this.a.a = 1;
}
a.a = 2;
a();
console.log(a.a);
  1. 1
  2. 2

測驗:請問結果為?

console.log(typeof typeof 1)
  1. string
  2. number
  3. object

測驗:請問結果為?

var a = [1, 2, 3];
a[19] = 20;
console.log(a.length);
  1. 19
  2. 20
  3. error

測驗:請問結果為?

var a = 'a';
console.log(Number(a = 10));
  1. NaN
  2. 10
  3. error

包裹物件建構函式

  • 使用 new + 包裹物件建立的會是物件型別,而不是原始型別。
  • 盡可能不使用此方式建立

測驗:請問結果為?

var a = 10;
var b = new Number(10);
console.log(a == b);
  1. true
  2. false

測驗:請問結果為?

var a = 10;
var b = new Number(10);
console.log(a === b);
  1. true
  2. false

測驗:請問結果為?

var a = new Number(10);
var b = new Number(10);
console.log(a == b);
  1. true
  2. false

測驗:請問結果為?

var a = 10;
a.a = 5;
console.log(a.a)
  1. 10
  2. 5
  3. undefined

測驗:請問結果為?

var a = new Number(10);
a.a = 5;
console.log(a.a);
  1. 10
  2. 5
  3. error

運算子

運算式與運算子


1 + 1

1 為 運算元

+ 為 運算子


測驗:請問結果為?

var a = 1;
var b = delete a;
console.log(b);
  1. error
  2. true
  3. false

解答:

delete 為 運算子


測驗:請問結果為?

var a = 1;
a++;
var b = a++;
console.log(b);
  1. 1
  2. 2
  3. 3

測驗:請問結果為?

if (new Boolean(0)) {
console.log('true')
} else {
console.log('false');
}
  1. true
  2. false

解答:

Boolean(0)  // false
new Boolean(0) // undefined 為 true

測驗:請問結果為?

function fn(n) {
return n > 1 ? n * fn(n - 1) : n;
}
console.log(fn(3));
  1. 3
  2. 6
  3. 7

測驗:請問結果為?

var a = 10;
console.log(++a * a);
a = 10;
console.log(--a * a);
  1. 110, 90
  2. 121, 81
  3. 100, 100

優先性、相依性

運算子優先序

運算子優先序(Operator precedence):

決定了運算子彼此之間被語法解析的方式,

優先序較高的運算子會成為優先序較低運算子的運算元(operands)。

  • 當優先序 相同 時,使用相依性決定運算方向。

測驗:請問結果為?

console.log(typeof 'a' + 'a')
  1. string
  2. stringa

測驗:請問結果為?

var a = 10;
console.log(a++ * a++);
  1. 100
  2. 110
  3. 121

測驗:承上題 a 的值為?

var a = 10;
console.log(a++ * a++);
console.log(a);
  1. 10
  2. 11
  3. 12

判斷式

測驗:請問結果為?

var a = 10;
var b = 0;
var c = b++ || a;
console.log(c);
  1. 10
  2. 0
  3. 1

參考 Logical operators


測驗:請問結果為?

console.log(10 == 10n);
console.log(10 === 10n);
  1. true true
  2. true false
  3. false false

測驗:請問結果為?

3 < 2 == 0
  1. true
  2. false
  3. 0
  4. 1

參考 運算子優先序


額外補充

// true
1 < 2 < 3

// false
3 > 2 > 1

數字型別運算的技巧

  • 只有 加法 不太一樣,因為他有 “字串相接” 的功能,所以遇到字串、物件型別會有不同結果
  • 減乘除都可以使用 Number 來轉型 ( 看是否能正確轉型 )

測驗:請問結果為?

var a = '1';
console.log(typeof a)
a = +a;
console.log(typeof a)
a = a + '';
console.log(typeof a)
  1. string string string
  2. string number number
  3. string number string

測驗:請問結果為?

console.log(100 === '10' * 10)
  1. true
  2. false

圖片來源: free background photos from pngtree.com