嚴(yán)格模式
- 嚴(yán)格模式是為JavaScript定義了一種不同的解析與執(zhí)行模型。在嚴(yán)格模式下荞驴,ECMAScript3中的一些不確定的行為將得到處理不皆,而且對(duì)某些不安全的操作也會(huì)拋出異常。
- 支持嚴(yán)格模式的瀏覽器: IE 10+熊楼、Firefox 4+霹娄、Safari 5.1+、Opera12+和Chrome鲫骗。
/*使用嚴(yán)格模式犬耻,可以在頂部添加以下代碼*/
" use strict";
/*在函數(shù)體內(nèi)部的上方包含這條編譯指令,也可以指定函數(shù)在嚴(yán)格模式下執(zhí)行*/
function doSomething() {
" use strict";
//函數(shù)體
}
JavaScript關(guān)鍵字和保留字
- 關(guān)鍵字和保留字不能被作為標(biāo)識(shí)符执泰。
/*關(guān)鍵字*/
break
case catch continue
do debugger default delete
else
for finally function
if in instanceof
new
return
switch
this throw try typeof
var void
while with
/*保留字*/
abstract
boolean byte
char class const
debugger double
enum export extends
final float
goto
implements import int interface
long let
native
package private protected public
short static super synchronized
throws transient
volatile
yield
var操作符
/*可以只定義一個(gè)變量不賦值,此時(shí)的變量為undefined*/
var message;
/*定義變量的同時(shí)賦值*/
var message = "hi"; //賦給變量message一個(gè)字符串
- 在函數(shù)中定義變量時(shí)要注意變量的作用域坦胶。
fuction test() {
var message = "hi"; //在函數(shù)體內(nèi)使用var定義的變量為局部變量
}
test();
alert(message)晴楔; //此時(shí)會(huì)報(bào)錯(cuò)顿苇,因?yàn)榫植孔兞吭趖est函數(shù)退出后就會(huì)被銷毀
/*這里可以省略var操作符使message變量變?yōu)槿肿兞浚煌扑]使用税弃,因?yàn)樵诰植孔饔糜蛑卸x的全局變量很難維護(hù)纪岁,有意的省略var操作符,也會(huì)由于相應(yīng)變量不會(huì)馬上就有定義二導(dǎo)致不必要的混亂则果。給未經(jīng)聲明的變量賦值在嚴(yán)格模式下會(huì)導(dǎo)致拋出ReferanceError錯(cuò)誤幔翰。*/
- 使用一條語(yǔ)句定義多個(gè)變量,中間用逗號(hào)隔開西壮。
var message = "hi",
found = "false",
age = 29;
- 在嚴(yán)格模式下遗增,不能定義名為eval或arguments的變量,否則會(huì)導(dǎo)致語(yǔ)法錯(cuò)誤款青。
JavaScript數(shù)據(jù)類型--使用typeof操作符可以檢測(cè)變量的數(shù)據(jù)類型
- Undefined類型
Undefined類型只有一個(gè)值做修,即特殊的undefined。
var message
alert (message == undefined);//true
alert(typeof message) ; //undefined
/*此處聲明了變量message抡草,但未對(duì)齊賦值饰及,所以message的值為undefined*/
/*此處還應(yīng)注意,對(duì)于沒(méi)有聲明的變量只能使用typeof操作符檢測(cè)其數(shù)據(jù)類型*/
// var age;
alert(age); //報(bào)錯(cuò)康震,因?yàn)閍ge沒(méi)有被聲明
alert(typeof age); //undefined
/*從邏輯上看燎含,null值表示一個(gè)空對(duì)象指針,使用typeof操作符檢測(cè)null值會(huì)返回“object”*/
var car = null;
alert(typeof car); //object
/*如果想要定義一個(gè)變量來(lái)保存對(duì)象腿短,最好將該變量初始化為null屏箍,這樣可以直接檢查null值就可以知道相應(yīng)變量是否已經(jīng)保存了一個(gè)對(duì)象的引用*/
if (car != null) {
//對(duì)car對(duì)象執(zhí)行某些操作
}
- Boolean類型
該類型只有true和false兩個(gè)字面值绘梦,區(qū)分大小寫。
- Number類型
/*十進(jìn)制*/
var intNum = 55; //整數(shù)
/*
八進(jìn)制
第一位必須是0铣除,如果字面值中的數(shù)值超出了范圍谚咬,那么前導(dǎo)零被忽略,后面的的數(shù)值將會(huì)被當(dāng)作十進(jìn)制解析
八進(jìn)制字面量在嚴(yán)格模式下是無(wú)效的尚粘,會(huì)導(dǎo)致支持該模式的JavaScript引擎拋出錯(cuò)誤
*/
var octalNum1 = 070; //八進(jìn)制56
var octalNum2 = 079; //無(wú)效的八進(jìn)制數(shù)值择卦,解析為79
/*
十六進(jìn)制
十六進(jìn)制字面值的前兩位必須是0x,后跟任何十六進(jìn)制數(shù)字(0~9及A~F)郎嫁,字母不區(qū)分大小寫
*/
var hexNum1 = 0xA; //十六進(jìn)制的10
/*
浮點(diǎn)數(shù)值
該數(shù)值中必須包含一個(gè)小數(shù)點(diǎn)秉继,并且小數(shù)點(diǎn)后面必須至少有一位數(shù)字
*/
var floatNum1 = 1.1;
var floatNum2 = 3.125e7; //等于31250000
/*
數(shù)值范圍: 5e~1.7976931348623157e+308
如果某次計(jì)算的結(jié)果超出了這個(gè)范圍,將會(huì)被轉(zhuǎn)換成-Infinity或Infinity泽铛,不會(huì)參與下一次計(jì)算
可以使用isFinite()函數(shù)檢測(cè)一個(gè)屬是不是有窮的尚辑,這個(gè)函數(shù)的參數(shù)位于最小與最大數(shù)值之間時(shí)會(huì)返回true
*/
var result = Number.MAX_VALUE + Number.MAX_VALUE;
alert(isFinite(result)); //false
/*
NaN
用于表示一個(gè)本來(lái)要返回?cái)?shù)值的操作數(shù)未返回值的情況,這樣就不會(huì)拋出錯(cuò)誤
*/
alert(NaN/10); //NaN,任何涉及NaN的操作都會(huì)返回NaN
alert( NaN == NaN); //false,NaN和任何值都不等盔腔,包括其本身
alert(isNaN(NaN)); //true,isNaN()函數(shù)接受一個(gè)參數(shù)杠茬,可檢測(cè)該參數(shù)是否“不是數(shù)值”
alert(isNaN(10)); //false(10是一個(gè)數(shù)值)
alert(isNaN(“10”)); //false(可以被轉(zhuǎn)換成數(shù)值10)
alert(isNaN(“blue”)); //true(不能被轉(zhuǎn)換成數(shù)值)
alert(isNaN(true)); //false(可以被轉(zhuǎn)換成數(shù)值1)
/*因此,在調(diào)用isNaN()函數(shù)時(shí)弛随,會(huì)先調(diào)用對(duì)象的valueOf()方法瓢喉,確定該方法返回的值是否可以轉(zhuǎn)化成數(shù)值,如果不能舀透,則基于這個(gè)返回值再調(diào)用toString()方法栓票,再測(cè)試返回值*/
/*
數(shù)值轉(zhuǎn)換
有三個(gè)函數(shù)可以把非數(shù)值轉(zhuǎn)換為數(shù)值:Number()、parseInt()和parseFloat()
*/
var num1 = Number("Hello World"); //NaN
var num2 = Number(""); //0
var num3 = Number("000011"); //11
var num4 = Number(true); //1
var num1 = parseInt("1234blue"); //1234
var num2 = parseInt(""); //NaN
var num3 = parseInt("0xA"); //10(十六進(jìn)制)
var num4 = parseInt(22.5); //22
var num5 = parseInt("070"); //56(八進(jìn)制)
var num6 = parseInt("70"); //70(十進(jìn)制)
var num1 = parseFloat("1234blue"); //1234
var num2 = parseFloat("0908.5"); //908.5
var num3 = parseFloat("0xA"); //0
var num4 = parseFloat(22.5); //22.5
var num5 = parseFloat("22.34.5"); 22.34
var num6 = parseFloat("3.125e7"); //31250000
- String類型
String類型用于表示由零或多個(gè)16位Unicode字符組成的字符序列愕够,即字符串,可以用雙引號(hào)(“)或單引號(hào)(‘)表示走贪。
/*字符字面量*/
\n //換行
\t //制表
\b //退格
\r //回車
\f //進(jìn)紙
\\ //斜杠
\' //單引號(hào)('),在用單引號(hào)次奧是的字符串中使用
\\" //雙引號(hào)(")惑芭,在用雙引號(hào)次奧是的字符串中使用
\xnn //以十六進(jìn)制代碼nn表示的一個(gè)字符(其中n為0~F)坠狡。例如,\x41表示“A”
\unnn //以十六進(jìn)制代碼nnnn表示的一個(gè)Unicode字符(其中n為0~F)遂跟。例如 擦秽,\u03a3表示希臘字符Σ
/*
字符串的特點(diǎn)
字符串一旦創(chuàng)建,它們的值就不能改變漩勤,要改變某個(gè)變量保存的字符串感挥,首席按要銷毀原來(lái)的字符串,然后再用一個(gè)包含新值的字符串填充該變量
*/
var lang = "Java";
lang = lang + "Script";
alert(lang); //JavaScript
/*轉(zhuǎn)換為字符串toString()方法和Sting()方法*/
var age = 11;
var ageString = age.toString(); //字符串“11”
var found = true;
var foundString = found.toString(); //字符串“true”
/*在不知道要轉(zhuǎn)換的值是不是null或undefined的情況下可以使用String()方法*/
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"
/*創(chuàng)建自定義對(duì)象*/
var 0 = new Object();
/*Object的每個(gè)實(shí)例都具有以下屬性和方法*/
constructor //保存用于創(chuàng)建當(dāng)前對(duì)象的函數(shù)越败。對(duì)于當(dāng)前例子而言触幼,構(gòu)造函數(shù)就是Object()。
hasOwnProperty(propertyName) //用于檢查給定的屬性當(dāng)前對(duì)象實(shí)例中是否存在究飞。作為參數(shù)的屬性名必須以字符串形式指定置谦。
isPrototypeOf(object) //用于檢查傳入的對(duì)象是否是當(dāng)前對(duì)象的原型堂鲤。
propertyIsEnumerable(propertyName) //用于檢查給定的屬性是否能夠使用for-in語(yǔ)句來(lái)枚舉。與hasOwnProperty()方法一樣媒峡,作為參數(shù)的屬性名必須以字符串形式指定瘟栖。
toLocalString //返回對(duì)象的字符串表示,該字符串與執(zhí)行環(huán)境的地區(qū)對(duì)應(yīng)谅阿。
toString //返回對(duì)象的字符串表示半哟。
valueOf //返回對(duì)象的字符串、數(shù)值或布爾值類型签餐。通常與toString()方法的返回值相同寓涨。