js高級編程note1

標記:
@書中錯誤勘正:錯誤記錄
@此處: 待補充

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 的幾種情況:

  1. ""
  2. 0
  3. NaN
  4. null
  5. 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ù)起效

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末造垛,一起剝皮案震驚了整個濱河市魔招,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌五辽,老刑警劉巖办斑,帶你破解...
    沈念sama閱讀 212,383評論 6 493
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異杆逗,居然都是意外死亡乡翅,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,522評論 3 385
  • 文/潘曉璐 我一進店門罪郊,熙熙樓的掌柜王于貴愁眉苦臉地迎上來蠕蚜,“玉大人,你說我怎么就攤上這事悔橄“欣郏” “怎么了腺毫?”我有些...
    開封第一講書人閱讀 157,852評論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長挣柬。 經(jīng)常有香客問我拴曲,道長,這世上最難降的妖魔是什么凛忿? 我笑而不...
    開封第一講書人閱讀 56,621評論 1 284
  • 正文 為了忘掉前任澈灼,我火速辦了婚禮,結(jié)果婚禮上店溢,老公的妹妹穿的比我還像新娘叁熔。我一直安慰自己,他們只是感情好床牧,可當我...
    茶點故事閱讀 65,741評論 6 386
  • 文/花漫 我一把揭開白布荣回。 她就那樣靜靜地躺著,像睡著了一般戈咳。 火紅的嫁衣襯著肌膚如雪心软。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,929評論 1 290
  • 那天著蛙,我揣著相機與錄音删铃,去河邊找鬼。 笑死踏堡,一個胖子當著我的面吹牛猎唁,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播顷蟆,決...
    沈念sama閱讀 39,076評論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼诫隅,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了帐偎?” 一聲冷哼從身側(cè)響起逐纬,我...
    開封第一講書人閱讀 37,803評論 0 268
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎削樊,沒想到半個月后豁生,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,265評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡嫉父,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,582評論 2 327
  • 正文 我和宋清朗相戀三年沛硅,在試婚紗的時候發(fā)現(xiàn)自己被綠了眼刃。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片绕辖。...
    茶點故事閱讀 38,716評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖擂红,靈堂內(nèi)的尸體忽然破棺而出仪际,到底是詐尸還是另有隱情围小,我是刑警寧澤,帶...
    沈念sama閱讀 34,395評論 4 333
  • 正文 年R本政府宣布树碱,位于F島的核電站肯适,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏成榜。R本人自食惡果不足惜框舔,卻給世界環(huán)境...
    茶點故事閱讀 40,039評論 3 316
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望赎婚。 院中可真熱鬧刘绣,春花似錦、人聲如沸挣输。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,798評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽撩嚼。三九已至停士,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間完丽,已是汗流浹背恋技。 一陣腳步聲響...
    開封第一講書人閱讀 32,027評論 1 266
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留逻族,地道東北人猖任。 一個月前我還...
    沈念sama閱讀 46,488評論 2 361
  • 正文 我出身青樓,卻偏偏與公主長得像瓷耙,于是被迫代替她去往敵國和親朱躺。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 43,612評論 2 350

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