顯示廣告
隱藏 ✕
看板 KnucklesNote
作者 Knuckles (站長 那克斯)
標題 [JS] 克服JS的奇怪部分 ch7 雜談
時間 2016-12-06 Tue. 13:43:58


Udemy課程: JavaScript全攻略:克服JS的奇怪部分
https://www.udemy.com/javascriptjs/learn/v4/overview
上完第七章的心得筆記

章節7 雜談

66. 「typeof」、「instanceof」與搞清楚這是什麼

使用 typeof 這個運算子可以得到一個變數的型別
var a = 3;
console.log(typeof a); //顯示 number

var b = "Hello";
console.log(typeof b); //顯示 string

var c = {};
console.log(typeof c); //顯示 object

var d = [];
console.log(typeof d); //顯示 object
發現陣列的型別也是顯示為 object

如果想要判斷變數是否為陣列,可以用
var d = [];
console.log(Object.prototype.toString.call(d)); //顯示 [object Array]
利用基本物件的函數建構子執行基本物件的 toString
並使用 call 將 this 改為陣列 d


使用 instanceof 運算子可判斷物件的原型鏈上有什麼
var e = new Person('Jane');
console.log(typeof e); //顯示 object
console.log(e instanceof Person); //顯示 true


對特殊值使用 typeof 時
console.log(typeof undefined); //顯示 undefined

console.log(typeof null); //顯示 object
typeof null 會顯示 object 是JS的一個 bug


對函數也可以使用 typeof
var z = function(){};
console.log(typeof z); //顯示 function


67. 嚴謹模式(Strict Mode)

因為JS是個很彈性的語言,容易造成一些未預期的問題
可以改用嚴謹模式來避免這些問題

只要在js檔案的開頭加上 "use strict"; 即可

使用嚴謹模式時,變數一定要先宣告才能使用
"use strict";

var person;
persom = {}; //person的n打成m了,會顯示錯誤: persom is not defined
console.log(persom); //不會執行這行

也可以加在函數裡,這樣就只有函數產生的執行環境會使用嚴謹模式
function logNewPerson(){
	
"use strict";

	
var person2;
	
persom2 = {}; 
	
console.log(persom2); 
}

var person;
persom = {}; //不會顯示錯誤
console.log(persom); //顯示 object {}
logNewPerson(); //顯示錯誤: persom2 is not defined


嚴謹模式在不同的瀏覽器可能會有不同的結果

如果有將所有js檔案合併成一個檔時,
只要第一個檔的開頭有加 "strict mode";
則所有的檔都會變成嚴謹模式


到 MDN 有更多關於嚴謹模式的資料:
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Strict_mode






--
※ 作者: Knuckles 時間: 2016-12-06 13:43:58
※ 看板: KnucklesNote 文章推薦值: 0 目前人氣: 0 累積人氣: 652 
分享網址: 複製 已複製
r)回覆 e)編輯 d)刪除 M)收藏 ^x)轉錄 同主題: =)首篇 [)上篇 ])下篇