1. 程式人生 > >JavaScript面試基礎知識

JavaScript面試基礎知識

根據StackOverflow調查, 自2014年一來,JavaScript是最流行的程式語言。當然,這也在情理之中,畢竟1/3的開發工作都需要一些JavaScript知識。因此,如果你希望在成為一個開發者,你應該學會這門語言。

這篇部落格的主要目的是將所有面試中常見的概念總結,方便你快速去了解。
(譯者按:鑑於本文內容過長,方便閱讀,將分為三篇部落格來翻譯。)

型別和型別轉換

在JavaScript中有7個內建型別:nullundefinedbooleannumberstringobject,和symbol(ES6)。

除了object以外,其它都叫做基本型別。

typeof 0              // number
typeof true           // boolean
typeof 'Hello'        // string
typeof Math           // object
typeof null           // object  !!
typeof Symbol('Hi')   // symbol (New ES6)
  • Null vs. Undefined

Undefined表示未定義。對於沒有初始化的變數、函式呼叫時候未提供的函式引數、缺失的物件屬性,它們的預設值就是undefined

。如果一個函式沒有返回語句,那麼預設的返回值也是undefined

NUll表示值為空。一個變數我們可以將其賦值為null,表示當前的沒有值。

  • 隱式轉換

請看下面的例子:

var name = 'Joey';
if (name) {
  console.log(name + " doesn't share food!")  // Joey doesn’t share food!
}

if語句的條件判斷中,name從字串轉換為布林型。在if的程式碼塊中,在控制檯將name原原本本打印出來。你知道在什麼情況下字串會轉換為真,什麼時候為假麼?

""0, nullundefinedNaNfalse 會自動轉換為false。其它的都會轉換為真:

Boolean(null)         // false
Boolean('hello')      // true 
Boolean('0')          // true 
Boolean(' ')          // true 
Boolean([])           // true 
Boolean(function(){}) // true

空陣列、物件、函式定義都會自動轉換為真。

  • String & Number之間的轉換

第一個你要非常小心的是+操作符。因為它同時用於數字相加和字串拼接。

*,/,-只用於數字運算,當這些操作符和字串一起使用,那麼字串會被強制轉換為數字。

1 + "2" = "12"
"" + 1 + 0 = "10"
"" - 1 + 0 = -1
"-9\n" + 5 = "-9\n5"
"-9\n" - 5 = -14
"2" * "3" = 6
4 + 5 + "px" = "9px"
"$" + 4 + 5 = "$45"
"4" - 2 = 2
"4px" - 2 = NaN
null + 1 = 1
  • == vs. ===

一個廣泛被接受的認知就是:==判斷值是否相等,===同時判斷值是否相等和型別是否相同。但是,這裡有些誤解。

實際上,==在驗證相等性的時候,會對型別不同的值做一個型別轉換。===對要判斷的值不做型別轉換。

2 == '2'            // True
2 === '2'           // False
undefined == null   // True
undefined === null  // False

型別轉換有很多取巧的地方,要注意:

let a = '0';
console.log(Boolean(a)); // True
let b = false;
console.log(Boolean(b)); // False
```	

你認為下面的相等判斷會輸出什麼值呢?
```js
console.log(a == b);

實際上會返回true。知道為什麼嗎?
如果你將一個布林型別的和非布林型別的判斷,JavaScript會將布林型別的轉換為數字然後再比對。
執行過程如下:

'0' == false   (1)
'0' == 0       (2)
 0  == 0       (3)

所以,最終變成了0==0,當然返回true啦。

如果你想看完整的資料,請檢視ES5的官方文件

如果想看cheat sheet, 點選這裡

一些比較容易掉坑的比較,我在這裡列出來:

false == ""  // true
false == []  // true
false == {}  // false
"" == 0      // true
"" == []     // true
"" == {}     // false
0 == []      // true
0 == {}      // false
0 == null    // false

相關推薦

JavaScript面試基礎知識

根據StackOverflow調查, 自2014年一來,JavaScript是最流行的程式語言。當然,這也在情理之中,畢竟1/3的開發工作都需要一些JavaScript知識。因此,如果你希望在成為一個開發者,你應該學會這門語言。 這篇部落格的主要目的是將所有

JavaScript基礎知識

string mil 標識 string類型 空間 數字字符串 保留字 標識符 減法 1,標識符 標識符是程序中常量或變量命名的一種術語稱呼,並不是所有的字符組成都是一個合法的標識符,規範如下: 標識符的組成部分可以是字母,數字,下劃線或美元($)符號 標識符

JavaScript函式基礎知識

函式 函式的定義 函式可以通過關鍵字 function 來定義。實質上function 物件是 Function函式的例項化物件。 下面是定義的例子 function fn(args){ //關鍵字定義函式 var vari = args; console

CNN找工作面試基礎知識

一、特徵圖大小計算方式 卷積中的特徵圖大小計算方式有兩種,分別是‘VALID’和‘SAME’。 根據tensorflow中的conv2d函式,我們先定義幾個基本符號 1、輸入矩陣 W×W,這裡只考慮輸入寬高相等的情況,如果不相等,推導方法一樣,不多解釋。 2、filter矩陣 F×F,卷

【夾娃系列】java面試基礎知識儲備(¥1)——java的優點和C++的異同點

怎麼才能夾到布娃娃 沒錯!!這個文章就是告訴你怎麼才能用一個硬幣,抓到最多的布娃娃QAQ,這是我抓娃娃的第一個硬幣¥1.【宣告】夾娃系列純屬個人學習,參考了不少面試的書,《程式設計之美》、《演算法珠璣》、《劍指offer》、《java程式設計師

【夾娃系列】java面試基礎知識儲備(¥2)——JVM記憶體劃分和記憶體溢位異常的原因和解決方法

JVM記憶體劃分和記憶體溢位 JVM記憶體劃分 記憶體溢位的異常和解決辦法 JVM記憶體劃分 堆:存放物件例項,被所有的執行緒共享的一塊區域。垃圾收集器管理的主要區域。 方法區:儲存虛擬機器載入的類資訊,常量,靜態變

實習小白java面試基礎知識彙總-day1

實習小白java面試基礎知識彙總-day1 1.簡單敘述java的跨平臺原理 2.分析JVM,JRE,JDK 3.java基本資料型別 4..面向物件的特徵有哪些方面 5.四個許可權修飾符的區別 6.包裝型別,裝箱和拆箱

java面試基礎知識總結(二)

五、Object 通用方法 equals()方法 等價關係 Ⅰ 自反性 x.equals(x); // true Ⅱ 對稱性 x.equals(y) == y.equals(x); // true Ⅲ 傳遞性 if (x.equals(y)

java面試基礎知識總結(一)

一、資料型別 包裝型別 八個基本型別: boolean/1 byte/8 char/16 short/16 int/32 float/32 long/64 double/64 基本型別都有對應的包裝型別,基本型別與其對應的包裝型別之間的賦值使用自動裝箱與拆箱完成。 Integer

C++面試基礎知識複習系列——一

1、const關鍵字的作用。 1>修飾變數,說明該變數不可修改; 2>修飾指標,分為常量指標與指標常量。 example1: int* const p=&a;指標常量,*p=8,ok;p=&b,錯誤; example2: const i

C++面試基礎知識複習系列——四

1、查詢; 查詢演算法 平均時間複雜度 空間複雜度 查詢條件 順序查詢 O(n) O(1) 無 二分查詢 O(log2n) O(1) 有序 雜湊查詢 O(1) O(n) 無 二叉查詢樹

面試基礎知識文件

一、JVM記憶體管理機制 1.Sun JDK在實現時遵照JVM規範,將記憶體空間劃分為堆、JVM方法棧、方法區、本地方法棧、PC暫存器。 (1)堆:堆用於儲存物件例項及陣列值,可以認為Java中所有通過new建立的物件的記憶體都在此分配,Heap中物件所佔用的記憶體由GC進行回收,在32位作業系

javaScript學習基礎知識彙總

•一:學習要求 •熟悉html,div+css •肯做練習 •好了,沒有第三條,不要求會html5、css3,不要求數學好英語棒,不要求你有程式基礎,不要求你邏輯性很好,認真聽講,多做練習,足以。 •二:開發工具 •能寫程式碼就行,沒有要求,按自己習慣來。  

Linux面試基礎知識--彙總

怎麼檢視系統支援的所有訊號? kill -lchmod 修改許可權 chown 修改檔案擁有者 chgrp修改群組27.使用什麼命令檢視磁碟使用空間? 空閒空間呢? df -hl29.使用什麼命令檢視 ip 地址及介面資訊? ifconfigdf 命令獲得真正的檔案系統資料(

面試基礎知識之LINUX篇

1. 硬連結和軟連線區別 * 硬連結: 與普通檔案沒什麼不同,inode 都指向同一個檔案在硬碟中的區塊 * 軟連結: 儲存了其代表的檔案的絕對路徑,是另外一種檔案,在硬碟上有獨立的區塊,訪問時替換自身路徑。 2. kill用法,某個程序殺不掉的原因(

Android面試基礎知識總結(一)

狀態:未完成 Android面試基礎知識總結。 Activity 生命週期 啟動Activity:onCreate->onStart->onResume鎖屏或被其它Activity覆蓋:onPause->onStop解鎖或由被覆蓋狀態再回到前臺:onRes

JavaScript面試基礎

1.何時使用==和===if(obj.a == null) {} 只有此時用==,其他時候用===,這是JQuery原始碼中推薦使用的寫法2.JS中按照儲存方式分為:值型別,引用型別值型別:賦值時不會互相干擾引用型別:指標型別,會互相干擾,它不是值的拷貝3.理解JSONJSO

面試基礎知識整理 —— 二叉搜尋樹

1. 定義 二叉查詢樹(英語:Binary Search Tree),也稱二叉搜尋樹、有序二叉樹(英語:ordered binary tree),排序二叉樹(英語:sorted binary tree),是指一棵空樹或者具有下列性質的二叉樹:

MySQL面試基礎知識整理

MySQL複製原理 三個程序,兩種檔案。 binlog dump、IO thread、SQL thread binlog 、relay log 以下圖片擷取自《高效能MySQL》 binlog日誌格式的種類和優缺點 有三種格式:s

面試基礎知識之計算機網路

一、計算機網路 基礎部分 1. TCP報頭格式 TCP協議頭最少20個位元組,包括以下的區域: TCP源埠(Source Port):16位的源埠其中包含初始化通訊的埠。源埠和源IP地址的作用是標示報問的返回地址。 TCP目的埠(Destinat