標記:
@書中錯誤勘正:錯誤記錄
@此處: 待補充
chapter 1#
完整的js實現(xiàn):核心(ECMAScript)+ 文檔對象模型(DOM) + 瀏覽器對象模型 (BOM)
ECMAScript####
關于js的基礎:語法剧蹂,類型街夭。亿傅。菲宴。
DOM
DOM不是針對js實現(xiàn)的,但是基于ECMAScript 實現(xiàn) 的DOM是js的一個重要部分箕昭。
DOM級別
- DOM1 文檔結(jié)構(gòu)
- DOM2 擴展毒姨,支持css
- DOM3 xml1.0
- 其他的: SVG 宿礁,MathML, SML
BOM
控制瀏覽器頁面外的部分茬射,瀏覽器的窗口框架鹦蠕。。在抛。
- 彈出窗口
- 移動钟病、縮放、關閉
- 瀏覽器各種信息
navigator詳細信息
location加載頁面的詳細內(nèi)容
screen顯示器分辨率
cookie支持
支持ie XMLHttpRequest 的自定義對象
chapter 2
在HTML中使用js
<script>
6 屬性
charset:定義字符集
language: 棄用
src: 外部文件連接
type: 一般可以不定義
defer: 讓腳本延遲到文檔完全被解析顯示后執(zhí)行,只限于外部文件. 使用:defer="defer"
有多個js defer文檔一般是按順序執(zhí)行,但最好一個文檔里面只有一個.
async:在客戶端部分立即下載腳本,只限于外部文件. 不讓頁面等待腳本下載, 異步加載其他部分( 讓html文檔先加載其他部分)。 async = "async"
最好多個 scrip async之間互不依賴肠阱。
慣例:外部js文件使用 .js 擴展名. 但不是必須的. 因browser 不檢查文件擴展名. 使用jsp php 生成js 代碼,但是服務器通常還是需要看擴展名決定為響應應用哪種 MIME 類型. 如果不是用.js 擴展名.確保服務器能返回正確的 MIME類型.
帶src的script 不應有額外的代碼, 因為只執(zhí)行外部文件.
script 應該放在body里面, 不然網(wǎng)頁會因為先解析head中的js 而造成延遲的現(xiàn)象.
在XTML中的用法稍不同于HTML
<noscript> 標簽內(nèi)容 在未啟用js時顯示.
<noscript> 請開啟javascript功能.</noscript>
chapter 3
注釋多行建議
/*
*這是一個
*多行的注釋票唆。
*/
嚴格模式
處理不確定的行為,對不安全的行為判錯屹徘。
在(js/ function)頂部 "use strict"
推薦模式:
if (test) {
alert("hahoo");
}
關鍵字
未掌握的
debugger
delete
instanceof
finally
typeof
void
with
保留字:最好不用為 標識符/ 屬性名
@此處應有圖片
一下代碼執(zhí)行沒錯,但不建議
var message = "hi"; message = 23;
數(shù)字
undefined
可區(qū)別空對象指針和 未經(jīng)初始化的變量
但是, 在以下的代碼中 返回結(jié)果一樣.
var message; alert(typeof message); alert(typeof age );
null
表示空對象指針, 所以 typeof null
的返回值是object
Boolean
true/ false 對應 1 / 0. True / False 可用于標識符
false 的幾種情況:
- ""
- 0
- NaN
- null
- undefined
@書本錯誤勘正
p25
age
undefined
alert(age)
undefined
number
八進制 070 十六進制 0xA
零 +0 == -0
// in chrome ff
parseInt("073")
73 //還是明確基數(shù)
var a = 1. ; //自動轉(zhuǎn)整形
var a1 = 1.0; //自動轉(zhuǎn)整形
var a2 = .1; // not recommand
var a3 = 3.2e7;
- 可設置數(shù)的返回有限走趋,若超出范圍將給對因變量自動轉(zhuǎn)換成 Infinity/ -Infinity
可設置一下提醒
alert( isFinite(result));
- 不要使用一下形式的測試
if(a + b == 0.3) { alert( "you got 0.3") //以為加的結(jié)果往往不對 }
NaN
not a number
遇到NaN, 不影響其他代碼
兩點重要
- 任何涉及NaN的操作都返回NaN
NaN == NaN //false
- NaN 與任何值都不等
函數(shù)isNaN() , 嘗試轉(zhuǎn)換成數(shù)值, 能轉(zhuǎn)換false
isNaN( NaN) isNaN("blue") // 以上true isNaN("10") //false isNaN(true) isNaN(10) isNaN(object)//適用于對象 @此處 后面應有補充
數(shù)字轉(zhuǎn)換
函數(shù)1. 函數(shù) Number()
- Boolean 1 / 0
- null 0
- undefined NaN
- string
- 只包含數(shù)值,直接轉(zhuǎn)換
- 有效的浮點數(shù)形式 "1.2" --> 1.1
- 十六進制 "0xA" --> 10
- "" --> 0
- 其他 --> NaN
- 對象: 調(diào)用對象的valueOf()方法, 再按前面的規(guī)則
函數(shù)2.parseInt()
"" "blue342" "blue" --> NaN
" 123ds" --> 123
"12.3" --> 12
"13e3" --> @此處測試
函數(shù)3.parseFloat()
相比parseInt() 多了識別浮點數(shù)的能力
"12.3.3" --> 12.3
string
單引號噪伊、雙引號
1.字符字面量 / 轉(zhuǎn)移序列
- \n \t \b空格
- \r回車 \f進紙 \斜杠 ' 單引號
- \xnn 十六進制數(shù)對應的字符 \x41--“A”
- \unnnn 十六進制數(shù)對應的unicode字符
@書中錯誤勘正
text = "this is the : \u03a3"
- "this is the : Σ"
text.length
- 15 //unicode算一個
2.字符串
@書中錯誤勘正
可變
3.轉(zhuǎn)換為字符串
- toString()
var age=11;
var ageString = age.toString();
數(shù)值 布爾值 對象 字符串 字符串都有, 但null undefined 沒有
String()
不明確是否是 null undefined時- 若值由toString 方法簿煌,調(diào)用此方法。
- null/ undefined鉴吹, 返回null/ undefined
alert(String(10));
...
//數(shù)字轉(zhuǎn)字符串 可根據(jù)進制
var num = 10
undefined
num.toString()
"10"
num.toString(2)
"1010"
將某值轉(zhuǎn)換成字符串 + ""
object
一組數(shù)據(jù)和功能的集合姨伟。new創(chuàng)建
var a = new Object(); //可以刪除圓括號
Object 每個實例都具有一下屬性和方法
- Constructor: 保存著用于創(chuàng)建當前對象的函數(shù)。 相當于上面代碼塊的object
- hasOwnProperty(* propertyname*):檢查和給定的屬性在當前對象實例中豆励,是否存在
- isPrototypeOf(object): 檢查傳入的對象是否是另一個對象的原型
- propertyIsEnumerable(* propertyName*):檢查給定的屬性是否能夠使用for-in語句來枚舉
- toLocaleString();返回對象的字符串表示授滓,該字符串與執(zhí)行環(huán)境的地區(qū)對應
- toString(); 返回對象的字符串表示
- valueOf(); 返回對象的字符串、數(shù)值肆糕、布爾值表示般堆。通常與 toString 的返回值相同。
操作符
不適用與null undefined诚啃,對象(先valueof()/ toString())
一元
++ --
p38
s1 = "2"
"2"
++s1// 前置,計算后賦值
3
s1 = "2"
"2"
s1++ //后置,計算前賦值
2
//左到右碰到+ 先做加 淮摔,碰到s1先用s1
string
var s1 = "2"
s1 ++
2
var s1 = "df2"
s1 ++
NaN
Boolean
var b = false
b++
0
b
1
+ -
非數(shù)值,后臺先Number()轉(zhuǎn)換
···
var s1 = "02"
s1 = +s1 //2
var s2 = "02.5"
s2 = -s2 //-2.5
var s3 = "z2.5"
s3 = -s3 //NaN
var o = {
valueOf: function() {
return -1;
}
}
o = -o //1
···
位操作符
操作64位-> 32 ->....->64位
實際上"只"存在 32位
- 無符號
- 有符號 符號位1+整數(shù)位31. 負數(shù):二進制補碼
~25 //-26
25 & 3 //1
25 | 3 //27
25 ^ 3 //26
2 << 5 //64
64 >> 5 //2
-64 >> 5 //-2
-64>>> 5 //134217726
乘性操作符
乘法
NaN * 4
NaN
Infinity * 0
NaN
Infinity * 4
Infinity
Infinity * -4
-Infinity
Infinity * Infinity
Infinity
Infinity * -Infinity
-Infinity
-Infinity * -Infinity
Infinity
// 非數(shù)值 后臺調(diào)用Number()
除法
含有無窮大小
Number.POSITIVE_INFINITY / 4
Infinity
4/Number.POSITIVE_INFINITY
0
3/ 0
Infinity
-Infinity / 4
-Infinity
Infinity / 4
Infinity
Infinity / Infinity
NaN
0 / 0
NaN
求模
Number.POSITIVE_INFINITY % 4
NaN
4 % Number.POSITIVE_INFINITY
4
Infinity % Infinity
NaN
Infinity % -Infinity
NaN
5 % 0
NaN
加性操作符
+0 > -0
false
+0 < -0
false
顯示的結(jié)果都是 0
+0 == -0
true
4 + "fd"
"4fd" // 字符串拼接, 有一個不是(對象 / 布爾/ 數(shù)字) ,轉(zhuǎn)換. null = "null" undefined = "undefined"
4 + 3
7
3+ "3"
"33"
關系操作符
字符串
"s" > "S"
true
5 == "5"
true
5 === "5"
false
null == undefined
true
true == 2
false
null == 0
false
undefined == 0
false
@書中錯誤勘正
p51
先轉(zhuǎn)成數(shù)值比較
3< 23
true
"3"< "23"
false
3< "23"
true
"3"< 23
true
條件操作
var max = (5 > 3)?5:3
undefined
max
5
逗號
num = (3,2,5,6,3,1)
1
語句
label
label: for (var i=0; i< 5; i++){
if (i == 3){continue label;}
alert(i)} //0 1 2 4
for-in
使用前,確定 對象值非 null/ undefined
with
with (person) {
var qs = name; // 前綴 peroson. 后臺統(tǒng)一給加上
var number = age // 定義的都是局部變量
}
嚴格模式下不允許, 因為大量使用with后 性能下降,調(diào)試困難, 不建議
函數(shù)
//object自帶函數(shù)
Object {}
__proto__
:
Object
constructor
:
function Object()
hasOwnProperty
:
function hasOwnProperty()
isPrototypeOf
:
function isPrototypeOf()
propertyIsEnumerable
:
function propertyIsEnumerable()
toLocaleString
:
function toLocaleString()
toString
:
function toString()
valueOf
:
function valueOf()
__defineGetter__
:
function __defineGetter__()
__defineSetter__
:
function __defineSetter__()
__lookupGetter__
:
function __lookupGetter__()
__lookupSetter__
:
function __lookupSetter__()
get __proto__
:
function __proto__()
set __proto__
:
function __proto__()
函數(shù)返回值:要不始終返回一個值始赎,要么永不返回和橙。為了方便調(diào)試代碼
嚴格模式中,參數(shù) / 函數(shù)命名 != eval / arguments. 量參數(shù)同名不許
參數(shù)
不在乎參數(shù)個數(shù) 類型, 命名的參數(shù)只是為了閱讀方便, 對于 程序而言非必須
傳遞的參數(shù)復制到內(nèi)置的arguments數(shù)組里
function add() {
alert(arguments.length) //3
}
add(3,3,3)
沒有重載
沒有函數(shù)簽名的特性
函數(shù)重復命名,后命名的函數(shù)起效