js中的5中基本數據類型 js標識符 關鍵字: 保留字: js註釋 js模式 嚴格模式:使用 use strict 混雜模式:不加 use strict js數據類型 js中有5中簡單數據類型,也成為基本數據類型:Undefined, Null, Boolean, Number, String js ...
js中的5中基本數據類型
js標識符
- 第一個字元必須為字母,下劃線,或美元符
- 其他字元可以是字母,下劃線,美元符,數字
- js標識符區分大小寫
- 標識符不能使關鍵字和保留字
關鍵字:
break | do | instanceof | typeof |
case | else | new | var |
catch | finally | return | void |
continue | for | switch | while |
debugger | function | this | with |
default | if | throw | |
delete | in | try |
保留字:
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 | implement | protected | volatile |
double | import | public |
js註釋
//單行註釋 /* 多行註釋 */
js模式
嚴格模式:使用 use strict
混雜模式:不加 use strict
js數據類型
js中有5中簡單數據類型,也成為基本數據類型:Undefined, Null, Boolean, Number, String
/* ======================================================= Undefined類型只有一個值:undefined,表示未定義這個量 為初始化的變數會自動賦予undefined值 */ var message; alert(typeof message); //undefined alert(age); //出錯,不執行這條語句 var message2; alert(typeof message2); //undefined alert(typeof age); //undefined /* Null類型也只有一個值:null */ alert(typeof null); //返回object,從邏輯角度來看,null值表示一個空對象指針 實際上是瀏覽器的bug一直延續至今 alert(undefined == null); //返回true,undefined派生自null值 /* Boolean類型只有兩個值:true和false。註意:TRUE,True,FALSE,False不是Boolean類型,而是標識符 可以對任何數據類型調用Boolean函數,總會返回一個Boolean值 數據類型 轉換為true的值 轉換為fasle的值 Boolean true false String 任何非空字元串 ""(空字元串) Number 任何非零數值(包括無窮大) 0和NaN Object 任何對象 null Undefined 不適用 undefined */ alert(Boolean(true)); //true alert(Boolean(false)); //false alert(Boolean("s")); //true alert(Boolean("")); //false alert(Boolean(2)); //true alert(Boolean(Infinity)); //true alert(Boolean(0)); //false alert(Boolean(NaN)); //false alert(Boolean(new Object()));//true alert(Boolean(null)); //false alert(Boolean(undefined)); //false /* Number類型 進行算數運算時,所有的八進位和十六進位會轉化為十進位數值 */ //十進位 alert(23); //23 alert(23.3); //23.3 alert(2.3e4); //23000 //若數字為0開頭則視為八進位,註意:八進位在嚴格模式下無效 alert(070); //56 //十六進位的前兩位為0x alert(0x33); //51 alert(Number.MAX_VALUE);//1.7976931348623157e+308 alert(Number.MIN_VALUE);//5e-324 /* 若數值不在MIN_VALUE和Number.MAX_VALUE之間, 1.num < 0, 返回-Infinity 2.num > 0, 返回Infinity */ var num = Number.MAX_VALUE + 1; alert(num); //Infinity num = Number.MIN_VALUE - Number.MAX_VALUE; alert(num); //-Infinity /* NaN:非數值,not a number。表示一個本來返回數值的操作數未返回數值的情況 1.任何涉及NaN的操作都會返回NaN 2.NaN和任何值都不相等 */ alert(NaN - 10); //NaN alert(NaN == NaN); //false /* isNaN()接受一個參數x,若x不是數值則返回true,反之返回false isNaN()接受參數x時會嘗試將x轉化為數值 */ alert(isNaN(NaN)); //true alert(isNaN(10)); //false alert(isNaN("10")); //false "10"可以轉化為數值10 alert(isNaN("blue")); //true "blue"不可以轉化為數值 alert(isNaN(false)); //false true可轉為1,fasle可轉為0 /* 數值轉換:Number(), parseInt()和parseFloat() */ //1.如果是Boolean值,則true返回1,false返回0 alert(Number(true)); //1 alert(Number(false)); //0 //2.如果是數值,則只是簡單的傳入和返回 alert(Number(23)); //23 //3.如果是null則返回0 alert(Number(null)); //0 //4.如果是undefined則返回NaN alert(Number(undefined)); //NaN //5.如果是NaN則返回NaN alert(Number(NaN)); //NaN //6.字元串 //6.1:若字元串中包含數字則將其轉換為十進位數即可;忽略前導0 alert(Number("23")); //23 alert(Number("23.3")); //23.3 alert(Number("023")); //23 alert(Number("023.3")); //23.3 alert(Number("0xA")); //10 //6.2:若是空字元串,則轉換為0 alert(Number("")); //0 //6.3:若字元串包含上述格式之外的字元則將其轉換為NaN alert(Number("23#")); //NaN //7.若是對象,則調用valueOf()方法,按上述方法轉換;若轉換為NaN則調用toString()方法再次按上述方法轉換 var a = new Object(); alert(Number(a)); //NaN a = "23"; alert(Number(a)); //23 //parseInt在解析字元串時和Number有點區別 //1.忽略空格,若第一個字元為數字字元,則解析到非數字字元為止 alert(parseInt(" 123 4blue")); //123,4前面的空格符是非數字字元 //2.空字元串返回NaN,無法識別字元串也返回NaN alert(parseInt("")); //NaN alert(parseInt("AF")); //NaN //3.能解析各種格式整數 alert(parseInt("0xA")); //10 alert(parseInt("70")); //70 alert(parseInt("070")); //56,ECMAScript3認為是56,ECMAScript5認為是70 alert(parseInt("0xf")); //15 //4.解析浮點數時,正數向下取整,負數向上取整 alert(parseInt(22.9)); //22 alert(parseInt(-22.9)); //-22 //可以給parseInt傳遞第二個參數,指定轉換的進位 alert(parseInt("A", 16)); //10 alert(parseInt(110, 2)); //6 alert(parseInt(110, 8)); //72 alert(parseInt(110, 10)); //110 alert(parseInt(110, 16)); //272 /* parseFloat()與parseInt類似;不過parseFloat()只解析十進位;若parseFloat()解析的是整數(也可沒有小數點,或者小數點後全為0), 則返回整數 */ alert(parseFloat("0xA")); //10 alert(parseFloat("2.000")); //2 alert(parseFloat(2.000)); //2 /* String類型 EMCAScript中的字元串是不可變的,字元串一旦創建它們的值就不能改變。 要改變某個變數保存的字元串,首先要銷毀原來的字元串,然後再用一個包含新值得字元串填充該變數 */ var lang = "Java"; lang = lang + "Script"; //先創建一個字元串用"JavaScipt填充",再銷毀原來的Java和Script字元串 //Boolean,Number,String,Object類型都有toString()方法,但是null和undefined沒有 var t = true; alert(t.toString());//true var num = 16; alert(num.toString()); //16 alert(num.toString(2)); //10000 alert(num.toString(8)); //20 alert(num.toString(10)); //16 alert(num.toString(16)); //10 num = 10; alert(num.toString(16)); //a var str = "23"; alert(str.toString()); //23 var a = new Object("2#"); //2# alert(a.toString()); /* String()方法:如果值有toString()方法,則調用該方法;如果值是null則返回null;如果值是undefined則返回undefined */ var value1 = 10; var value2 = true; var value3 = null; var value4; alert(String(value1)); //10 alert(String(value2)); //true alert(String(value3)); //null alert(String(value4)); //undefined /* Obejct類型 Object的每個實例都有下列屬性和方法 constructor:保存著用於創建當前對象的函數 hasOwnProperty(propertyName):用於檢查給定的屬性當前對象實例中(不是實例的原型)是否存在 isPrototypeOf(object):用於檢查傳入的對象是否是當前對象的原型 proPertyIsEnumerable(propertyName):用於檢查給定的屬性是否能使用for-in語句來枚舉 toLocaleString():返回對象的字元串表示 toString():返回對象的字元串表示 valueOf():返回對象的字元串,數值或布爾值表示 */ var o = new Object(); //創建對象 var o = { "age" : 13 } //給對象添加屬性 o.name = "libra"; o.money = "100"; //訪問屬性 alert(o.age); //13 alert(o.name); //libra alert(o["name"]); //100 //檢測類型 var str = "Nicholas"; var bool = true; var int = 22; var undi; var nul = null; var ob = new Object(); var arr = new Array(); //typeof常用來檢測基本類型值,也可用來檢測引用類型值 alert(typeof str); //string alert(typeof bool); //boolean alert(typeof int); //number alert(typeof undi); //undifined alert(typeof nul); //null alert(typeof ob); //object alert(typeof arr); //object /* instanceof 常用來檢測引用類型值 */ //註意:所有引用類型值為Object實例,所以始終會返回true,但是基本類型不是對象,則返回false; alert(ob instanceof Object); //true alert(str instanceof Object); //false alert(arr instanceof Object); //true alert(arr instanceof Array); //true
js操作符
js有9種操作符:一元操作符,位操作符,布爾操作符,乘性操作符,加性操作符,關係操作符,相等操作符,條件操作符,賦值操作符
/* 一元操作符:+, -, ++, -- +, -, ++, --可以作用於任何值 */ var age = 10; alert(age++); //10,下一個age是11 alert(++age); //執行++後為12 alert(age--); //12,下一個age是11 alert(age); //11 alert(--age); //執行--後為10 alert(age + 10); //20 alert(age - 10); //0 //連接符 alert("我有" + age + "歲了!"); //我有10歲了! /* 位操作符:~, &, |, ^, <<, >>, >>> 若對非數值應用位操作符,會先使用Number()函數將該值轉換為一個數值(自動完成),然後再應用位操作。 */ //按位非~:操作數的負數減一 alert(~1); //-2 alert(~"1"); //-2 //按位與&:對應的二進位數進行邏輯與操作,返回1或0 alert(25 & 3); //1 //按位與|:對應的二進位數進行邏輯或操作,返回1或0 alert(25 | 35); //59 //按位與^:對應的二進位數進行邏輯異或操作,返回1或0 alert(25^3); //26 //左移:二進位數左移n位,空位用0填充;a << n = a * 2^n; alert(2 << 3); //16 //有符號右移:二進位數右移n位,空位用符號位填充 alert(25 >> 3); //3 //無符號右移對於正數,和有符號右移一樣 alert(64 >>> 5); //2 //無符號右移對於負數,二進位數右移n位,空位用0填充 alert(-64 >>> 5); //134217726 /* 布爾操作符:!, &&, || &&, || 為短操作,即若是第一個操作數能決定結果則不會對第二個操作數求值 可以應用於任何類型的操作數,返回布爾值true或false或操作數 */ //1.若操作數是一個對象則返回false alert(!new Object(2)); //false //2.若操作數是空字元串則返回true alert(!""); //true //3.若操作數是任何非空字元串則返回false alert(!"@#4"); //false //4.若操作數是數值0則返回true alert(!0); //true //5.若操作數是任何非零數值(包括無窮)則返回false alert(!12); //false alert(!Infinity); //false //6.若操作數是null,NaN,undefined則返回true alert(!null); //true alert(!NaN); //true alert(!undefined); //true //對於邏輯與操作,若第一個操作數為false則結果為false //1.若第一個操作數為對象則返回第二個操作數 alert(new Object("23") && "34");//34 //2.若第二個操作數為對象,則當第一個操作數為true時返回該對象 alert(true && new Object(2)); //2 alert(false && new Object(2)); //false //3.//若兩個操作數都為對象則返回第二個操作數 alert(new Object("23") && new Object(2)); //2 //4.若有一個操作數是null則返回null alert(null && 2); //null alert(2 && null); //null //5.若有一個操作數是NaN則返回NaN alert(NaN && 2); //NaN alert(2 && NaN); //NaN //6.若有一個操作數是undefined則返回undefined alert(undefined && 2); //undefined alert(2 && undefined); //undefined //7.任何數值(包括Infinity)為true alert(0 && 3); //對於邏輯或操作,若第一個操作數為true則結果為true //1.若第一個操作數是對象則返回該對象 alert(new Object(2) || false); //2 //2.若第二個操作數是對象,則當第一個操作數為false時返回該對象 alert(false || new Object(2)); //2 //3.若兩個操作數是對象,則返回第一個操作數 alert(new Object(33) || new Object(3));//33 //4.若兩個操作數是null, NaN, Undefined,當操作數一樣時則返回它們本身,不一樣是返回第二個操作數 alert(null || null); //null alert(NaN || NaN); //NaN alert(undefined || undefined); //undefined alert(NaN || undefined); //undefined /* 乘性操作符:*, /, % */ //乘法:* //1.若操作數都是數值則返回數值,若數值範圍超過了ECMAScript的表示範圍則返回Infinity和-Infinity alert(2 * 3.3); //6.6 alert(2 * Number.MAX_VALUE);//Infinity //2.任何NaN的操作返回NaN alert(2 * NaN); //NaN //3.Infinity * 0 返回NaN alert(Infinity * 0); //NaN //4.Infinity乘以非零數值則返回Infinity或者-Infinity alert(Infinity * 2); //Infinity alert(Infinity * -2); //-Infinity alert(Infinity * Infinity); //Infinity alert(Infinity * -Infinity); //-Infinity //5.若有操作數不是數值,則後臺調用Number()方法轉換,在應用上述規則 alert(2 * "2"); //4 alert(2 * "2#"); //NaN, 應為"2#"用Number()轉換後為NaN //除法:/ //1.若操作數都是數值則返回數值,若數值範圍超過了ECMAScript的表示範圍則返回Infinity和-Infinity alert(2 / 2); //1 alert(2 / Number.MIN_VALUE);//Infinity //2.任何NaN操作都返回NaN alert(2 / NaN); //NaN //3.Infinity / Infinity返回NaN alert(Infinity / Infinity); //NaN //4. 0 / 0 返回NaN alert(0 / 0); //NaN //5.非零有限數被零除則返回Infinity或-Infinity alert(0 / 23); //0 alert(23 / 0); //Infinity //6.Infinity被任何非零數值除,則返回Infinity或-Infinity alert(Infinity / 4); //Infinity alert(4 / Infinity); //0 //7.若有操作數不是數值,則後臺調用Number()方法轉換,在應用上述規則 alert(2 / "2"); //1 alert(2 / "2#"); //NaN, 應為"2#"用Number()轉換後為NaN //求模:% //1.若操作數是數值則按常規計算 alert(5 % 12); //2 //2.被除數是無窮,除數是有限數值則返回NaN alert(Infinity % 2); //NaN alert(-Infinity % 2); //NaN //3.若被除數是有限數值, 除數是無窮則返回被除數 alert(2 % Infinity); //2 //4.若被除數是有限數值,除數是零則返回NaN alert(2 % 0); //NaN //5.若被除數和除數都是Infinity則返回NaN alert(Infinity % Infinity); //NaN //6.若被除數是0則結果是0 alert(0 % 32); //0 //7.若有操作數不是數值,則後臺調用Number()方法轉換,在應用上述規則 alert(2 % "2"); //0 alert(2 % "2#"); //NaN, 應為"2#"用Number()轉換後為NaN /* 加性操作符:+, - */ //加法+ //1.任何NaN操作返回NaN alert(1 + NaN); //NaN //2.Infinity + Infinity = Infinitu;Infinity - Infinity = NaN; alert(Infinity + Infinity); //Infinity alert(Infinity + -Infinity); //NaN alert(-Infinity + -Infinity); //-Infinity, -(Infinity + Infinity) //3. 0 + 0 = 0; 0 - 0 = 0; alert((+0) + (+0)); //+0, +(0 + 0) alert((+0) + (-0)); //+0, +(0 - 0) alert((-0) + (-0)); //-0, -(0 + 0) //4.若操作數中有字元串,則+就是連接符,則調用toString(), 或String()方法將操作數變成字元串再進行拼接 alert("##" + 23); //"##23" alert(null + "3"); //"null3" //減法- //1.任何NaN操作返回NaN alert(1 - NaN); //NaN //2.Infinity + Infinity = Infinitu;Infinity - Infinity = NaN; alert(Infinity - Infinity); //NaN alert(Infinity - -Infinity); //Infinity, Infinity + Infinity alert(-Infinity - Infinity); //-Infinity, -(Infinity + Infinity) //3. 0 + 0 = 0; 0 - 0 = 0; alert((+0) - (+0)); //+0, +(0 - 0) alert((+0) - (-0)); //+0, +(0 + 0) alert((-0) - (-0)); //-0, -(0 - 0) //4.若操作數中有字元串,則+就是連接符,則調用toString(), 或String()方等法將操作數變成字元串再進行拼接 alert("##" - 23); //NaN, "##"轉換後為NaN alert(null - "3"); //-3, alert(3 - null); //3 alert(undefined - "3"); //NaN alert(3 - undefined); //NaN /* 關係操作符:>, <, <=, >= 返回true或false */ //若兩個操作數是數值,則執行數值比較 alert(2 >= 3);//false //如果兩個操作數是字元串,則比較兩個字元串對應的字元編碼值 alert("a" > "3");//true //若有操作數不是數值,則將其轉換為字元串進行比較 alert(2 < "3");//true //若操作數是對象則調用valueOf(),toString()等方法轉換後進行比較 alert(new Object("2") >= 3);//false //若操作數是布爾值則先將其轉換為數值再執行比較 alert(true >= false);//true /* 相等操作符:==, !=, ===, !== ==, !=:先轉換再比較 ===, !==:僅比較不轉換 */ alert(true == 1); //true alert(false == 0); //true alert(true == 2); //false alert(false == -1); //false alert("23" == "23"); //true alert(new Object(2) == "2"); //true alert(null == undefined); //true alert(null == 0); //false alert(undefined == 0); //false alert(NaN != NaN); //true alert("2" == 2); //true, 先將"2"轉換為數值2在比較 alert("2" === 2); //false,直接進行比較 alert("2" !== 2); //true /* 條件操作符: expression ? result1 : result2; */ var num = 1 > 2 ? 3 : 4; alert(num); //4, 1 > 2 為假 num = 1 < 2 ? 3 : 4; alert(num); //3, 1 < 2 為真 /* 賦值和計算 */ var num1, num2; num1 = num2 = 2; alert(num1 *= num2);//4 num1 = num2 = 2; alert(num1 /= num2);//1 num1 = num2 = 2; alert(num1 %= num2);//0 num1 = num2 = 2; alert(num1 += num2);//4 num1 = num2 = 2; alert(num1 -= num2);//0 num1 = num2 = 2; alert(num1 <<= num2);//8 num1 = num2 = 2; alert(num1 >>= num2);//0 num1 = num2 = 2; alert(num1 >>>=num2);//0