JavaScript學習(一)——基礎知識查漏補缺
標簽script
我們知道,html要使用js就要使用
<script>
標簽。
兩種方式:
一是直接在<script>
這裏</script>
寫入代碼。
二是在別的文件寫好js代碼,然後script標簽的src屬性引入進來。
script其實有6個屬性(全都是可選):
- src:包含要執行代碼的外部文件;
- language:現在已廢棄;
- type:表示編寫代碼使用的腳本語言的內容類型;
- charset:指定src引入代碼的字符集;
- async:表示應該立即下載腳本;
-
defer:表示腳本可以延遲到文檔完全被解析和顯示後再執行。
type的解釋也說明了一個問題,
<script></script>
例如:<script type=‘text/html‘ id="tpl"></script>
<script type=‘text/foo-template‘ id="foo-tpl"></script>
有些模板引擎就利用了它來實現DOM節點的模板填充。
註意:<script><script>
中間不要在任何地方出現‘</script>
‘字符串
關鍵字,保留字
以前只記住了幾個關鍵字,現在還註意到了保留字,保留字就是在js當中其實沒啥用的但是就是不給用來當做命名的單詞,多為Java語言的關鍵字。
數據類型
typeof操作符,可以判斷某值的數據類型。我們都知道,一共六種。
1、undefined
2、boolean
3、string
4、number
5、function
6、object
undefined與null
undefined 指變量尚未初始化
null 指變量值為一個空對象指針
其實它們的意思和用法基本都是一致的,在js裏,我們完全可以只用undefined而不去使用null,這樣混不混淆都無所謂了。
唯一的區別:
console.log(typeof undefined)--undefined
console.log(typeof null)--object
阮一鋒的解釋:
null表示"沒有對象",即該處不應該有值。典型用法是:
(1) 作為函數的參數,表示該函數的參數不是對象。
(2) 作為對象原型鏈的終點。
Object.getPrototypeOf(Object.prototype)
// null
undefined表示"缺少值",就是此處應該有一個值,但是還沒有定義。典型用法是:
(1)變量被聲明了,但沒有賦值時,就等於undefined。
(2) 調用函數時,應該提供的參數沒有提供,該參數等於undefined。
(3)對象沒有賦值的屬性,該屬性的值為undefined。
(4)函數沒有返回值時,默認返回undefined。
var i;
i // undefined
function f(x){console.log(x)}
f() // undefined
var o = new Object();
o.p // undefined
var x = f();
x // undefined
number
轉換數值的三個方法:
Number(),parseInt(),pasreFloat()
Number()功能比較強大,規則如下:
true:1
false:0
null:0
undefined:NaN
"":0
"011":11(忽略前面的0)
"011.1":11.1(忽略前面的0)
"0x11":17(0x開頭十六進制)
"別的格式的字符":NaN
parseInt()規則如下:
僅轉換字符串,其他非數字類型統一返回NaN
"":NaN
"011":11(忽略前面的0)
"011.1":11(忽略前面的0)
"0x11":17
"123abc":123
"abc123":NaN
parseFloat()規則如下:
僅轉換字符串,其他非數字類型統一返回NaN
"":NaN
"011":11(忽略前面的0)
"011.1":11(忽略前面的0)
"0x11":0(忽略前面的0)
"123abc":123
"abc123":NaN
整數還可以通過二進制,八進制,十六進制來表示。
其中,八進制字面值的第一位必須是0
十六進制字面值的前兩位必須是0x
我們從字符串轉過來的時候如果有要求則要再傳一位進制數:
parseInt("011",2):3
parseInt("011",8):9
parseInt("011",16):17
parseInt("0xaa",16):170
parseInt("aa",16):170
註意:程序在計算的時候0開頭的數字會被解析為八進制,0x開頭的數字會被解析為十六進制。最終結果為十進制。因此,我們做計算的時候最好不要用帶0開頭的數字進行計算,避免讓別人看迷糊。
等號
一個等號:賦值
兩個等號:判斷相等
三個等號:判斷全等
一、賦值問題
在echarts.js源碼中看到了一句:
var ecModel = this._model = new GlobalModel(null, null, theme$$1, optionManager);
其中連續賦值了兩次,後來查閱資料,發現執行過程是這樣的:
1、var ecModel =new GlobalModel(null, null, theme$$1, optionManager);
2、this._model = new GlobalModel(null, null, theme$$1, optionManager);
連續多個賦值操作,可從左到右拆分成每個變量直接等於最後的值,而不會執行像var ecModel = this._model這樣的語句。
其實不推薦這樣寫,這種寫法能避開就避開唄。
二、關於 ==
== 和 != 會先轉換再比較
比較規則:
1、一個布爾值,一個數字 true:1,false:0
2、一個字符串,一個數字 先轉成數字
3、一個對象,一個數字 先調用對象的valueOf()再按前面的規則
4、兩個對象 比較是否同一個對象
例: var a={},b={}; console.log(a==b);//false
5、null==undefined true
6、NaN==NaN false
label 語句
label語句可以在代碼中添加標簽,以便將來使用。一般與循環語句的break和continue配合使用。
舉個例子:
我有一個嵌套循環,當滿足條件的時候執行語句並跳出外層循環。
var num=0;
firstfor:
for(var i=0;i<10;i++){
secondfor:
for(var j=0;j<10;j++){
if(i==5 && j==5){
break firstfor;//跳出第一個for循環
}
num++;
}
}
alert(num); //num=55
重載
js沒有重載!
重載只在java裏只說過,js沒聽說過。
然而百度到的全都是js實現重載的方法。
我的疑問(等待回答):
既然js都不支持重載了,為什麽還要特意去模仿實現重載呢?
JavaScript學習(一)——基礎知識查漏補缺