前言:純手打!!!按照本身思路重寫!!!此次是二刷了,想暑假作一次完整的筆記,但用本子來寫筆記的話太貴了,可能哪天還丟了。。因此仍是博客好==數組
第三章:基本概念(語法、數據類型、流控制語句、函數)安全
3.1 語法:函數
ECMAScript的語法大量借鑑了C及其餘語言。測試
3.1.1 區分大小寫this
3.1.2 標識符:編碼
指的是變量、函數、屬性的名字、函數的參數。注意:首字符必須是一個字母、下劃線、或者美圓$符號。spa
ES標識符采用駝峯大小寫格式(首字母小寫,其餘單詞的首字母大寫,如:setData),不能夠把關鍵字、保留字、true、false、null做爲標識符。debug
3.1.3 註釋:指針
單行註釋: //code
塊級註釋: /* *內容 */
3.1.4 嚴格模式:對某些不安全的操做拋出錯誤
在腳本中啓動嚴格模式,能夠在其頂部寫一行代碼:"use strict" 。
3.1.5 語句:
以分號結尾,其實也能夠不寫,但最好寫。。。
3.2 關鍵字和保留字:(這些都不能夠做爲標識符)
關鍵字大體爲: break、else、new、var、 case、 finally 、 return、 void 、 catch 、for 、switch 、 while 、 continue、 function 、this 、 with 、default 、 if 、 throw 、 delete 、 in 、 try 、do 、 instranceof、 typeof。。。
保留字大體位: abstract 、 enum 、int 、 short 、 boolean 、export 、interface、 static、 byte 、extends 、 long 、 super 、 char 、 final 、native 、synchronized 、 class 、float 、 package 、throws 、 const 、goto 、private 、transient 、 debugger 、 implements 、protected 、 volatile 、 double 、import 、public、class、entends、super、const、export、import、let、public。。。、
3.3 變量:
3.4 數據類型:
3.4.1 typeof操做符:
檢測給定變量的數據類型——typeof
如:var message = "some string";
alert(type of message); //"string"
alert(type of null); //」object"
3.4.2 Underfined類型:
var message; var message1 = undefined; var age
alert(message == undefined); //true
alert(message); //undefined
alert(age); //產生錯誤
alert(message1 == underfined); //true
3.4.3 Null類型:
null值表示一個空對象指針,因此用typeof檢測會返回「object」。
var car = null;
alert(typeof car); //"object"
!!!注意 undefined值是派生自null值的,因此 alert(null == undefined); //true
3.4.4 Boolean類型:
該類型只有兩個字面值:true和false。
數據類型 |
轉換爲true的值 |
轉換爲false的值 |
---|---|---|
Boolean |
true |
false |
String |
任何非空字符串 |
" "(空字符串) |
Number |
任何非0數字值(包括無窮大) |
0和NaN |
Object |
任何對象 |
null |
Undefined |
n/a(不適用) |
undefined |
這些轉換規則對理解流控制語句(如if語句)自動執行相應的Boolean轉換很是重要:
var mesage = "Hello World";
if (message) { // 這個message自動轉換了對應的Boolean值——ture
alert("Value is true");
}
3.4.5 Number類型:
數值字面量格式:(在進行算術計算時,全部八進制和十六進制表示的數值最終都將被轉換成十進制數值)
後面的數值被看成十進制來看,var octalNum1 = 070; //八進制的56 var octalNum2 = 079; //無效的八進制,解析爲79
Number() :能夠用於任何數據類型,轉型函數將其轉換爲數值。
parseInt():處理整數的時候經常使用:
parseFloat() :與parseInt()的類似與區別是 都是從第一個字符開始解析,只認識一個小數點,會忽略一開始的0,只識別十進制,而十六進制的字符串會被轉換爲0
3.4.6 string類型:即字符串
能夠由雙引號和單引號表示。
\n 表示換行,\t 表示製表,\b表示退格,\r表示回車,\\表示斜槓,\'表示單引號,\"表示雙引號,\xnn表示以十六機制代碼nn表示的一個字符(n爲0~F),\unnnn表示以十六進制代碼nnnn表示的一個Unicode字符(n爲0~F)。
!!!注意,n個字符長的轉移序列只表示一個字符(在length裏表示1)
可傳參也能夠不傳參,參數表示以n進制格式(基數)返回數值,默認不填爲十進制。
var num = 10;
alert (num.toString()); // "10"
alert (num.toString(2)); // "1010"
alert (num.toString(8)); // "12"
alert (num.toString(10)); // "10"
alert (num.toString(16)); // "a"
3.4.7 Object類型:就是對象!即一組數據和功能的集合。
對象能夠經過執行new操做符後跟要建立的對象類型的名稱來建立,即 var o = new Object (); 若是不用給構造函數傳參,也能夠這麼寫:var o = new Object;但不推薦。
關於Object的每一個實例的具體屬性和方法,第5、六章再討論。
3.5 操做符:
是用於操做數據值的操做符,包括算術操做符、位操做符、關係操做符、相等操做符。
3.5.1 一元操做符:
var num1 = 2; var num2 = 20; var num3 = num1-- + num2; //等於22,由於是後置,因此在var num3語句裏它不改變先,等到這條語句被求值以後才改變 var num4 = num1 + num2 ; //等於21,num1=1。
valueOf : function () {
return -1;
}
}
3.5.2 位操做符:本小節暫不講解。。。。。。。
3.5.3 布爾操做符:
若使用兩個!那就是反過來咯。
若第一個操做數能決定結果了,那第二個就無視。即第一個是false,那就不看第二個了。若第一個是true,那仍是會去看第二個(第二個不可使用未定義的值)。
若兩個操做數都是對象,則返回第二個操做數;若第一個操做數是null,則返回null;若第一個操做數是NaN,則返回NaN;若第一個操做數是undefined,則返回undefined;
第一個操做數 |
第二個操做數 |
結果 |
---|---|---|
true |
true |
true |
true |
false |
false |
false |
true |
false |
false |
false |
false |
若第一個操做數能決定結果了,那第二個就無視。即第一個是true,那就不看第二個了。若第一個是false,那仍是會去看第二個(第二個不可使用未定義的值)。
若兩個操做數都是對象,則返回第一個操做數;若兩個操做數都是null,則返回null;若兩個操做數都是NaN,則返回NaN;若兩個操做數都是undefined,則返回undefined;
第一個操做數 |
第二個操做數 |
結果 |
---|---|---|
true |
true |
true |
true |
false |
true |
false |
true |
true |
false |
false |
false |
3.5.4 乘性操做符:乘法、除法和求模,會自動把非數值的操做符轉換位數值(即自動用Number()轉換)
3.5.5 加性操做符:加法、減法
!!!最重要的來了,若是兩個操做數都是字符串,則將第二個操做數與第一個操做數拼接起來;若是隻有一個操做數是字符串,則將另一個操做數轉換爲字符串,再將第二個操做數與第一個操做數拼接起來。
若是有一個操做符是對象、數組或布爾值,則調用它們的toString() 方法取得相應的字符串值;對於undefined和null,則分別調用String()函數並取得」undefined「和」null「。
例題:var num1 = 5; var num2 = 10; var message = "The sum of 5 and 10 is" + num1 + num2; alert(message); //"The sum of 5 and 10 is 510" ;
var num1 = 5; var num2 = 10; var message = "The sum of 5 and 10 is" + (num1 + num2); alert(message); //"The sum of 5 and 10 is 15" ;
var result1 = 2 + true; // 3,由於true被Number()函數轉換成1
!!!最重要的來了,它和加法不同,不拿來拼接什麼鬼字符串。
!!! (主要是使用了Number()函數)
例題:var result1 = 5 - true; //4
var result2 = NaN - 1; //NaN
var result3 = 5 - 3; //2
var result4 = 5 - " "; //5
var result5 = 5 - 」2「; //3
var result6 = 5 - null; //5
3.5.6 關係操做符:大於、小於、小於等於、大於等於:
相應規則:
例題:var result = "a" < 3; //false,字符串a不能被轉換成合理的數值,因此」a"被轉換成NaN
var result1 = "23" < "3"; //true,比較的是字符編碼
var result2 = "23" < 3; //false,由於」23「變成了23
3.5.7 相等操做符:==、!= ,===、!== :
表達式 |
值 |
---|---|
null == undefined、false == 0、NaN != NaN、」5「 == 五、true == 1 |
true |
」NaN「 == NaN、5 == NaN、NaN == NaN、null == 0、undefined == 0 |
false |
未完、待續。