JavaScript 筆記

用法

1 外部 javascript 文件不使用 <script> 標簽,直接寫 javascript 代碼。
2 HTML 輸出流中使用 document.write,相當于添加在原有html代碼中添加一串html代碼。而如果在文檔加載后使用(如使用函數(shù))程帕,會覆蓋整個文檔住练。

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>菜鳥教程(runoob.com)</title>
</head>
<body>
    
<p>
JavaScript 能夠直接寫入 HTML 輸出流中:
</p>
<script>
document.write("<h1>這是一個標題</h1>");
function changeImage()
{
    alert("歡迎來到JavaScript的世界地啰,這里將為你開啟新世界的大門")
    document.getElementById("demo").innerHTML="我的第一個 JavaScript 函數(shù)";
    document.write("<p>哈哈哈哈哈</p>")//執(zhí)行該操作,會覆蓋整個文檔
}
</script>
<p id="demo">一個段落</p>
<button type="button" onclick="changeImage()">點我!</button>
<p>
您只能在 HTML 輸出流中使用 <strong>document.write</strong>讲逛。
如果您在文檔已加載后使用它(比如在函數(shù)中)亏吝,會覆蓋整個文檔。
</p>
</body>
</html>

字符串

規(guī)則:如果把數(shù)字與字符串相加盏混,結(jié)果將成為字符串蔚鸥!

typeof 操作符

JavaScript中,數(shù)組是一種特殊的對象類型许赃。 因此 typeof [1,2,3,4] 返回 object
用 typeof 檢測 null 返回是object止喷。

變量提升

var x = 5; // 初始化 x

elem = document.getElementById("demo"); // 查找元素 
elem.innerHTML = x + " " + y;           // 顯示 x 和 y

var y = 7; // 初始化 y

輸出結(jié)果

x 為:5,y 為:undefined

之所以輸出了 undefined混聊,這是因為變量聲明 (var y) 提升了弹谁,但是初始化(y = 7) 并不會提升,所以 y 變量是一個未定義的變量句喜。
也就是等同于下面的代碼

var x = 5; // 初始化 x
var y;     // 聲明 y

elem = document.getElementById("demo"); // 查找元素
elem.innerHTML = x + " " + y;           // 顯示 x 和 y

y = 7;    // 設置 y 為 7

雖然感覺這個變量提升很闊以的樣子预愤,但是作為一個碼農(nóng),還是遵循老祖宗的規(guī)矩咳胃,用之前就聲明植康,一是方便閱讀維護,二是避免出現(xiàn)問題再需要各種排查

JavaScript 嚴格模式(use strict)

"use strict" 指令只允許出現(xiàn)在腳本或函數(shù)的開頭

然后禁止了一堆東西如下列
禁止刪除變量或?qū)ο?br> 禁止刪除函數(shù)
禁止變量重名
禁止使用八進制
禁止使用轉(zhuǎn)義字符
禁止對只讀屬性賦值
禁止對一個使用getter方法讀取的屬性進行賦值
禁止刪除一個不允許刪除的屬性
變量名不能使用 "arguments" 字符串
由于一些安全原因展懈,在作用域 eval() 創(chuàng)建的變量不能被調(diào)用
禁止this關(guān)鍵字指向全局對象
使用構(gòu)造函數(shù)時销睁,如果忘了加new,this不再指向全局對象存崖,而是報錯

JavaScript 使用誤區(qū)

最常見的判斷錯誤

var x = 10;
var y = "10";
if (x == y)

true

在嚴格的比較運算中冻记,===為恒等計算符,同時檢查表達式的值與類型金句,如下

var x = 10;
var y = "10";
if (x ===y)

false

這種錯誤經(jīng)常會在switch語句中出現(xiàn)檩赢,switch語句會使用恒等計算符(===)進行比較

var x = 10;
switch(x) {
    case 10: alert("Hello");//會執(zhí)行
}
var x = 10;
switch(x) {
    case "10": alert("Hello");//不會執(zhí)行
}

加法與連接以及減法

var x = 10 + 5;          // x 的結(jié)果為 15
var x = 10 + "5";        // x 的結(jié)果為 "105"
var x = "5" + 10;        // x 的結(jié)果為 "510"
var x = 10 - "5";        // x 的結(jié)果為 5
var x = "5" - 10 ;        // x 的結(jié)果為 -5

浮點型數(shù)據(jù)使用注意事項

var x = 0.1;
var y = 0.2;
var z = x + y            // z 的結(jié)果為 0.3
if (z == 0.3)            // 返回 false
<script>
var x = 0.1;
var y = 0.2;
var z = x + y;
document.getElementById("demo").innerHTML = z;
</script> 
運行結(jié)果 0.30000000000000004

JavaScript中的所有數(shù)據(jù)都是以64為浮點型數(shù)據(jù)(float)來存儲
為了解決上述問題,可以用整數(shù)的乘除法來解決

var z = (x * 10 + y * 10) / 10;       // z 的結(jié)果為 0.3

JavaScript 中精度問題以及解決方案

JavaScript this 關(guān)鍵字

面向?qū)ο笳Z言中 this 表示當前對象的一個引用。
但在 JavaScript 中 this 不是固定不變的贞瞒,它會隨著執(zhí)行環(huán)境的改變而改變偶房。

  • 在方法中,this 表示該方法所屬的對象军浆。
  • 如果單獨使用棕洋,this 表示全局對象。
  • 在函數(shù)中乒融,this 表示全局對象掰盘。
  • 在函數(shù)中,在嚴格模式下赞季,this 是未定義的(undefined)愧捕。
  • 在事件中,this 表示接收事件的元素申钩。
  • 類似 call() 和 apply() 方法可以將 this 引用到任何對象次绘。

函數(shù)

在 JavaScript 中, 函數(shù)是對象。JavaScript 函數(shù)有它的屬性和方法撒遣。
call() 和 apply() 是預定義的函數(shù)方法邮偎。 兩個方法可用于調(diào)用函數(shù),兩個方法的第一個參數(shù)必須是對象本身义黎。

function myFunction(a, b) {
    return a * b;
}
myObject = myFunction.call(myObject, 10, 2);     // 返回 20
function myFunction(a, b) {
    return a * b;
}
myArray = [10, 2];
myObject = myFunction.apply(myObject, myArray);  // 返回 20

兩個方法都使用了對象本身作為第一個參數(shù)禾进。 兩者的區(qū)別在于第二個參數(shù): apply傳入的是一個參數(shù)數(shù)組,也就是將多個參數(shù)組合成為一個數(shù)組傳入廉涕,而call則作為call的參數(shù)傳入(從第二個參數(shù)開始)泻云。
在 JavaScript 嚴格模式(strict mode)下, 在調(diào)用函數(shù)時第一個參數(shù)會成為 this 的值, 即使該參數(shù)不是一個對象火的。
在 JavaScript 非嚴格模式(non-strict mode)下, 如果第一個參數(shù)的值是 null 或 undefined, 它將使用全局對象替代壶愤。

閉包

變量聲明時如果不使用 var 關(guān)鍵字,那么它就是一個全局變量馏鹤,即使它在函數(shù)內(nèi)定義

閉包會持有父方法的局部變量并且不會隨父方法銷毀而銷毀
閉包這里的使用和理解單獨再寫個筆記吧征椒,東西可能有些多
JavaScript 閉包 深入理解

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市湃累,隨后出現(xiàn)的幾起案子勃救,更是在濱河造成了極大的恐慌,老刑警劉巖治力,帶你破解...
    沈念sama閱讀 211,948評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件蒙秒,死亡現(xiàn)場離奇詭異,居然都是意外死亡宵统,警方通過查閱死者的電腦和手機晕讲,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,371評論 3 385
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人瓢省,你說我怎么就攤上這事弄息。” “怎么了勤婚?”我有些...
    開封第一講書人閱讀 157,490評論 0 348
  • 文/不壞的土叔 我叫張陵摹量,是天一觀的道長。 經(jīng)常有香客問我馒胆,道長缨称,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,521評論 1 284
  • 正文 為了忘掉前任祝迂,我火速辦了婚禮睦尽,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘液兽。我一直安慰自己骂删,他們只是感情好,可當我...
    茶點故事閱讀 65,627評論 6 386
  • 文/花漫 我一把揭開白布四啰。 她就那樣靜靜地躺著,像睡著了一般粗恢。 火紅的嫁衣襯著肌膚如雪柑晒。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,842評論 1 290
  • 那天眷射,我揣著相機與錄音匙赞,去河邊找鬼。 笑死妖碉,一個胖子當著我的面吹牛涌庭,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播欧宜,決...
    沈念sama閱讀 38,997評論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼坐榆,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了冗茸?” 一聲冷哼從身側(cè)響起席镀,我...
    開封第一講書人閱讀 37,741評論 0 268
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎夏漱,沒想到半個月后豪诲,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,203評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡挂绰,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,534評論 2 327
  • 正文 我和宋清朗相戀三年屎篱,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,673評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡交播,死狀恐怖专肪,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情堪侯,我是刑警寧澤嚎尤,帶...
    沈念sama閱讀 34,339評論 4 330
  • 正文 年R本政府宣布,位于F島的核電站伍宦,受9級特大地震影響芽死,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜次洼,卻給世界環(huán)境...
    茶點故事閱讀 39,955評論 3 313
  • 文/蒙蒙 一关贵、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧卖毁,春花似錦揖曾、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,770評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至翔脱,卻和暖如春奴拦,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背届吁。 一陣腳步聲響...
    開封第一講書人閱讀 32,000評論 1 266
  • 我被黑心中介騙來泰國打工错妖, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人疚沐。 一個月前我還...
    沈念sama閱讀 46,394評論 2 360
  • 正文 我出身青樓暂氯,卻偏偏與公主長得像,于是被迫代替她去往敵國和親亮蛔。 傳聞我的和親對象是個殘疾皇子痴施,可洞房花燭夜當晚...
    茶點故事閱讀 43,562評論 2 349

推薦閱讀更多精彩內(nèi)容