//javascript基礎語法備忘錄-變數和資料型別
// 定義變數使用var關鍵字 後面跟變數名,不要使用eval 和arguments為變數名
var message = "hi";
message =100; //有效但是不推薦
//如果宣告變數時未初始化,message儲存一個特殊值undefined
var message;
// 在函式中定義變數一定要使用var ,否則此變數將成為全域性變數
function test() {
var a = 1; //勿要忘記var
}
//ECMAscript有5中基本資料型別,Undefined,Null,Boolean,Number,String
//一個值使用typeof操作符 將返回一下字串,注意typeof不是函式 而是一個操作符
"undefined" //如果這個值未定義
"boolean" //如果是布林值
"string" //如果是字串
"number"//如果是數值
"object" //如果是物件或者null
"function" //如果是函式
//以下三種方式都可以
alert(typeof message); //"string"
alert(typeof (message));//"string"
alert(typeof 95); //number
//Undefined型別只有一個值,就是undefined,在使用var宣告但沒有初始化的話,這個變數值就是undefined,
var m1 ;
alert(m1 == undefined); //true
//下面與上面等價
var m2 = undefined; //沒有必要初始化undefined,未經初始化的值預設就是undefined
alert(m2 == undefined); //true
//注意包含undefined的值和尚未定義的值是不一樣的
//下面沒有宣告 var age
alert(message);//“undefined”
alert(age); //產生錯誤
//上面的程式碼第一個 顯示message的值 undefined
//第二行顯示一個錯誤 因為age沒有定義
//對未宣告的變數只能使用typeof檢測資料型別 ,但是會返回undefined,為未初始化的也會返回undefined,所以對顯示的初始化。例如字串初始化為"",數值初始化為0, 當使用typeof時,如果返回的是undefined,那麼這個變數就沒被宣告
//對未宣告的變數使用delete不會產生錯誤,
//Null型別是第二隻只有一個值的型別, typeof檢測到null時返回object,如果定義的變數用來儲存物件,應該初始化為null 這樣一來只要檢查到物件是否被儲存
//只要在儲存的變數沒有真正儲存物件,就應該初始化為null ,這樣體現了null作為空物件指標的管理。也用來區別undefined
alert(null == undefined);//ture
var cat = null;
alert(typeof cat); //object
//Boolean型別有兩個值,ture和false ,true不一定等於1,false不一定等於0 ,true和false是區分大小寫的,True和False不是Boolean的值
//將一個值轉換為Boolean 可以使用Boolean();
var t1 = "hello";
var bm = Boolean(t1);
//以下會返回true,
/*
true,非空字串,非零數字值,任何物件
*/
//以下返回false
/*
false,"",0和NaN,null,undefined
*/
//在流程判斷時錯誤的使用物件而不是布林值會產生錯誤
//在進行算術運算的時候 八進位制和十六進位制都會被轉換成十進位制,正零和負零被認為相等
//浮點數小數點後必須有一位數字,如果小數點後面沒有數字就會作為整數儲存,浮點數本身是一個整數,也會被轉換成整數
var f1 = .1;//有效但不推薦
var f2 =1.; //解析為1
var f3 =10.0 ;//解析為10.0
//數值範圍從 Number.MIN_VALUE~Number.MAX.VALUE 也就是5e-324~1.7976931348623157e+308
//如果超過這個範圍,負數轉換成-Infinity 正數Infinity
//如果某數得到了INfinity將無法參與下次計算
//可以使用isFinite()函式檢測是否在範圍內 不是返回false
var result = Number.MAX_VALUE+Number.MIN_VALUE;
alert(isFinite(result)); //false
//NaN(Not a Number) 用於表示返回一個數值操作,但是沒有返回的情況,任何NaN參與的運算結構都是NaN,它與任何值都不相等,包括自己
alert(NaN==NaN) //flase
//isNaN()接收一個引數 任何不能轉換為數值的值都會使整個函式返回true
//數值,布林值,物件,字串都有toString()方法,但null和undefined沒有 , 通過傳引數可以使toString()轉換為輸出數值的字串形式
var num = 10;
alert(num.toString(2)); //"10"
alert(num.toString(8)); //"1010"
alert(num.toString(10)); //"10"
//如果不知道轉換值是不是null或者undefined時 使用String();
alert(String(null)); //"null"
alert(String(age)); //"undefined" age沒有宣告
//Object型別
var o = new Object();
var o2 = new Object; //推薦
//每個物件都有以下方法和屬性
//constructor 用於儲存創見當前物件的建構函式 上面例子就是Object();
//hasOwnProperty(propertyName),檢查給定的屬性是否存在當前物件中 屬性名必須是字串形式
o.hasOwnProperty("name");
//isPrototypeOf()檢查傳入的物件是否是物件的原型