標籤:建立 原型 init valueof pre out 退出 範圍 文法
基本概念一、文法一)區分大小寫二)標識符
書寫規則同Java
三)注釋
略
四)strict 模式
1.在整個指令碼中啟用strict 模式:在頂部添加
"use strict"
2.指定函數在strict 模式下執行:
function doSth() { "use strict" //函數體}
二、變數
ECMAScript變數類型是鬆散類型,所謂鬆散類型就是可以儲存任何類型的資料。
//定義變數var msg;//注意由var定義的變數使局部變數,如果變數在函數中函數退出後變數就會被銷毀//省略var定義並初始化一個全域變數msg2 = "Hi" //不推薦在函數中定義全域變數,因為在局部範圍中定義全域變數很難維護,//函數中的變數也會因為不會馬上就用定義導致不必要的混亂//定義多個var a = 1,b = ‘yes‘,c = 5;
三、資料類型
五種基礎資料型別 (Elementary Data Type):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); //true4 console.log(name === undefined); //true5 // 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 任何非Null 字元串 ""即空串
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); //numberconsole.log(typeof NaN); //number
1.整數
可以是十進位八進位(八進位strict 模式無效)十六進位
var a = 070 //八進位56var b = 079 //無效的八進位,解析為79
2.浮點數
var a = 1.0 //自動解析為1var b = .123 //有效不推薦var c = 1.23e3 //123if (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)); //trueconsole.log(isNaN("Yellow")); //trueconsole.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!"); //NaNvar num3 = Number("000011"); //11
2.parseInt()函數:
parseInt()函數會忽略字串前面的空格,直到找到第一個非Null 字元,如果第一個字元不是數字或者負號就返回NaN
var num1 = parseInt("1234blue"); // 1234var num2 = parseInt(""); // NaNvar num3 = parseInt("0xA"); // 10(十六進位數)var num4 = parseInt(22.5); // 22var num5 = parseInt("070"); // 56(八位元)
var num1 = parseInt("AF", 16); //175var 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基礎筆記(一)基本概念