JavaScript基礎筆記(一)基本概念
基本概念
一、語法
一)區分大小寫
二)標識符
書寫規則同Java
三)註釋
略
四)嚴格模式
1.在整個腳本中啟用嚴格模式:在頂部添加
"use strict"
2.指定函數在嚴格模式下執行:
function doSth() { "use strict" //函數體 }
二、變量
ECMAScript變量類型是松散類型,所謂松散類型就是可以保存任何類型的數據。
//定義變量 var msg; //註意由var定義的變量使局部變量,如果變量在函數中函數退出後變量就會被銷毀 //省略var定義並初始化一個全局變量 msg2 = "Hi" //不推薦在函數中定義全局變量,因為在局部作用域中定義全局變量很難維護,//函數中的變量也會因為不會馬上就用定義導致不必要的混亂 //定義多個 var a = 1,b = ‘yes‘,c = 5;
三、數據類型
五種基本數據類型:Null,Undefined, Boolean, Number, String
一種復雜數據類型:Object,Object本質上是由一組無序的名值對組成。
ECMAScript不支持任何創建自定義類型機制,所以所有的類型最終都將是上述6種類型之一。
typeof操作符:用於檢測變量類型。對一個值使用該操作符會返回下列字符串之一:
1."undefined":
2."boolean"
3."string"
4."number"
5."object":如果該值是對象或者null
6."function"
一)Undefined類型
Undefined類型只有一個值:undefined
1 var msg; 2 var name = undefined; 3 console.log(msg == undefined); //true 4 console.log(name === undefined); //true 5 // console.log(age); //報錯----"age is not defined" 6 console.log(typeof age); //"undefined"-----對於未聲明的變量,只能執行該操作
所以,顯示地初始化變量是最吼的!!!!+1s
二)Null類型
Null也只有一個值:null。
undefined派生於null
alert(null == undefined); //true
三)Boolean類型
要將一個值轉換為Boolean類型可以調用Boolean()函數。
各種類型轉換為Boolean類型
數據類型 轉換為true的值 轉換為false的值
String 任何非空字符串 ""即空串
Number 任何非零數字 0和NaN
Object 任何Object null
Undefined n/a (不適用) undefined
註意:
var msg = "hi"; if (msg) { //自動轉換為Boolean類型 console.log("msg is true"); }
四)Number類型
console.log(typeof Infinity); //number console.log(typeof NaN); //number
1.整數
可以是十進制八進制(八進制嚴格模式無效)十六進制
var a = 070 //八進制56 var b = 079 //無效的八進制,解析為79
2.浮點數
var a = 1.0 //自動解析為1 var b = .123 //有效不推薦 var c = 1.23e3 //123 if (0.3+0.2 == 0.5) { //因為浮點數計算時精度問題,不要這樣做 }
3.數值範圍
最小:Number.MIN_VALUE 最大:Number.MAX_VALUE 超出範圍自動轉換為Infinity,Infinity不能參與數值計算。
判斷是否屬於最大與最小之間可以用:isFinite(num)函數。
4.NaN
即(Not a number)是一個特殊數值,表示本來要返回數值而沒有返回的情況(這樣就不用報錯了)。
註意:1.任何涉及NaN的操作都會返回NaN 2.NaN與任何數值都不相等,包括其本身。
isNaN()
console.log(isNaN(NaN)); //true console.log(isNaN("Yellow")); //true console.log(isNaN("100")); //false
5.數值轉換
1.Number()函數:
可用於任何數據類型
Boolean值分別轉換為1和0
null轉換為0
undefined轉換為NaN
字符串:
只包含數值轉換為10進制,包含有效的16進制格式轉換為10進制,空串轉換為0,其余轉換為NaN。
如果是對象則先調用valueOf()函數,如果得到NaN則再調用toString()
var num1 = Number("Hello world!"); //NaN var num3 = Number("000011"); //11
2.parseInt()函數:
parseInt()函數會忽略字符串前面的空格,直到找到第一個非空字符,如果第一個字符不是數字或者負號就返回NaN
var num1 = parseInt("1234blue"); // 1234 var num2 = parseInt(""); // NaN var num3 = parseInt("0xA"); // 10(十六進制數) var num4 = parseInt(22.5); // 22 var num5 = parseInt("070"); // 56(八進制數)
var num1 = parseInt("AF", 16); //175 var num2 = parseInt("AF"); //NaN
五)String類型
1.String 類型用於表示由零或多個 16 位 Unicode 字符組成的字符序列,即字符串。字符串可以由雙
引號(")或單引號(‘)表示 (無區別)。
2.ECMAScript 中的字符串是不可變的
3.轉換為字符串可用toString()函數,也可用String()函數:
? 如果值有 toString()方法(null和undefined沒有這個方法),則調用該方法(沒有參數)並返回相應的結果;
? 如果值是 null,則返回"null";
? 如果值是 undefined,則返回"undefined"。
三)Object類型
ECMAScript中類型是所有他的實例的基礎,即Object具有的所有方法和屬性同樣存在於更具體的對象中。
Object每個實例具有的方法和屬性:
1)constructor:保存著創建當前對象的函數,比如,Object()
2)hasOwnProperty(propertyName):用於檢查給定的屬性在對象實例中(而不是實例的原型中)是否存在。其中propertyName必須以字符串的形式指定。
3)propertyIsEnumerable(propertyName):檢查給定的語句能否用for-in語句來枚舉。同樣propertyName必須是字符串。
4)toLocalString()
5)toString()
6)valueOf()
註意:從技術角度講, ECMA-262 中對象的行為不一定適用於 JavaScript 中的其他對象。瀏覽器環境中的對象,比如 BOM 和 DOM 中的對象,都屬於宿主對象,因為它們是
由宿主實現提供和定義的。 ECMA-262 不負責定義宿主對象,因此宿主對象可能會也可能不會繼承 Object。
三、操作符
略
四、語句
for in 對對象的屬性進行遍歷,其順序不可預測。
label語句:
var num = 0; outermost: for (var i=0; i < 10; i++) { for (var j=0; j < 10; j++) { if (i == 5 && j == 5) { break outermost; } num++; } } alert(num); //55
使用with語句會導致性能下降,調試困難,不建議使用。
switch語句
可以在switch()括號中使用任何類型,case中也不一定是常量,可以是變量或者表達式。
註意:switch語句在比較時使用的是全等符,因此不會發生類型轉換。
五、函數
語法:
function funName() { //doSth }
註意:
1.調用函數時必須帶上括號
2.不必指定返回值,當然也可以指定
3.return語句不帶任何返回值時,函數在停止後返回undefined
4.函數參數可以是任意多個,調用函數時可以傳遞任意多個參數,不一定與定義時相等,因為這個特性ECMAScript中函數不能重載
後定義的函數會覆蓋先定義的函數。
之所以會出現4中的情況,ECMAScript函數在函數內部時用一個類似數組的arguments對象來表示的,可以像用數組一樣使用arguments對象。
我們可以根據arguments的長度實現一個偽重載:
function doAdd() { if(arguments.length == 1) { alert(arguments[0] + 10); } else if (arguments.length == 2) { alert(arguments[0] + arguments[1]); } }
JavaScript基礎筆記(一)基本概念