1. 程式人生 > >JavaScript部分問題

JavaScript部分問題

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有兩個最基本的型別nullundefined。它們的含義是不同的:

  • 如果還沒有被初始化,則是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或則你自己實現一個比較演算法。

請解釋undefinednot 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

參考自https://juejin.im/post/5bd95d22e51d45685f442f73