JavaScript部分問題
阿新 • • 發佈:2018-11-03
JavaScript中的相等判斷
話題: JavaScript 難度: ⭐
JavaScript中的相等判斷有嚴格判斷和帶隱式轉換的判斷兩種:
- 嚴格判斷(strict comparision): 比如
===
,比較的時候不會隱式轉換型別; - 抽象判斷(abstract comparasion):比如
==
,比較的時候會隱式轉換型別。
var a = "42";
var b = 42;
a == b; // true
a === b; // false
複製程式碼
一些簡單的規則:
- 如果兩邊都是布林型別的值,使用
===
- 如果兩邊是0,
""
,[]
,使用===
; - 所有其它型別,使用
==
是安全的。而且在很多情況下會簡化程式碼、增加可讀性。
請解釋Null和Undefined
話題: JavaScript 難度: ⭐⭐
JavaScript和TypeScript有兩個最基本的型別null
和undefined
。它們的含義是不同的:
- 如果還沒有被初始化,則是
undefined
; - 如果不可用,則可以用
null
來表示;
請解釋JavaScript中的值和型別
話題: JavaScript 難度: ⭐⭐
下面是JavaScript內建的可用型別:
- string
- number
- boolean
- null和undefined
- object
- symbol (ES6的新語法)
如果比較JavaScript中的兩個物件?
話題: JavaScript 難度: ⭐⭐
兩個非基本型別的值,比如物件(包括函式和陣列)都是通過引用的形式來訪問。如果直接通過==
和===
來判斷,那麼只會簡單的判斷其引用地址是否相同,而不是它們實際對應的值。
如果陣列和字串做比較,那麼陣列會通過逗號拼接轉換為字串。通過等號判斷的時候,兩個相同的陣列不會相等,但是和相同資料的字串比較反而相等。
var a = [1,2,3]; var b = [1,2,3]; var c = "1,2,3"; a == c; // true b == c; // true a == b; // false 複製程式碼
如果要深度比較,可以使用第三方庫,比如deep-equal
或則你自己實現一個比較演算法。
請解釋undefined
和not defined
的區別
話題: JavaScript 難度: ⭐⭐⭐
在JavaScript中,如果你嘗試使用不存在的還未申明的變數,JavaScript會丟擲錯誤var name is not defined
。但是如果你用typeof
來檢視其型別,會返回undefined
。
我們先來澄清一下宣告和定義的區別:var x
是一個宣告,因為你並沒有定義其具體的值,你只是宣告其存在性。
var x; // declaring x
console.log(x); //output: undefined
複製程式碼
var x = 1
同時兼具宣告和定義,我們也可以叫它初始化。在JavaScript中,每一個變數和函式宣告都會被提升到頂部。
如果我們訪問一個聲明瞭但是未定義的變數,會返回undefined
。
var x; // Declaration
if(typeof x === 'undefined') // Will return true
複製程式碼
訪問一個未宣告未定義的變數,會返回not defined錯誤。
console.log(y); // Output: ReferenceError: y is not defined