JS-嚴格模式、關鍵字和保留字、var操作符、數(shù)據(jù)類型

嚴格模式

  • 嚴格模式是為JavaScript定義了一種不同的解析與執(zhí)行模型。在嚴格模式下,ECMAScript3中的一些不確定的行為將得到處理,而且對某些不安全的操作也會拋出異常。
  • 支持嚴格模式的瀏覽器: IE 10+、Firefox 4+、Safari 5.1+、Opera12+和Chrome。
/*使用嚴格模式,可以在頂部添加以下代碼*/
" use strict";

/*在函數(shù)體內(nèi)部的上方包含這條編譯指令,也可以指定函數(shù)在嚴格模式下執(zhí)行*/
function doSomething() {
  " use strict";
  //函數(shù)體
}

JavaScript關鍵字和保留字

  • 關鍵字和保留字不能被作為標識符。
/*關鍵字*/
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操作符

  • var操作符定義變量。
/*可以只定義一個變量不賦值,此時的變量為undefined*/
var message;

/*定義變量的同時賦值*/
 var message = "hi"; //賦給變量message一個字符串
  • 在函數(shù)中定義變量時要注意變量的作用域。
fuction test() {
  var message = "hi"; //在函數(shù)體內(nèi)使用var定義的變量為局部變量
}
test();
alert(message); //此時會報錯,因為局部變量在test函數(shù)退出后就會被銷毀

/*這里可以省略var操作符使message變量變?yōu)槿肿兞?,但不推薦使用,因為在局部作用域中定義的全局變量很難維護,有意的省略var操作符,也會由于相應變量不會馬上就有定義二導致不必要的混亂。給未經(jīng)聲明的變量賦值在嚴格模式下會導致拋出ReferanceError錯誤。*/
  • 使用一條語句定義多個變量,中間用逗號隔開。
var message = "hi",
      found = "false",
      age = 29;
  • 在嚴格模式下,不能定義名為eval或arguments的變量,否則會導致語法錯誤。

JavaScript數(shù)據(jù)類型--使用typeof操作符可以檢測變量的數(shù)據(jù)類型

  • Undefined類型
    Undefined類型只有一個值,即特殊的undefined。
var message
alert (message == undefined);//true
alert(typeof message) ; //undefined
/*此處聲明了變量message,但未對齊賦值,所以message的值為undefined*/

/*此處還應注意,對于沒有聲明的變量只能使用typeof操作符檢測其數(shù)據(jù)類型*/
// var age; 
alert(age); //報錯,因為age沒有被聲明
alert(typeof age);  //undefined
  • Null類型
/*從邏輯上看,null值表示一個空對象指針,使用typeof操作符檢測null值會返回“object”*/
var car = null;
alert(typeof car);  //object

/*如果想要定義一個變量來保存對象,最好將該變量初始化為null,這樣可以直接檢查null值就可以知道相應變量是否已經(jīng)保存了一個對象的引用*/
if (car != null) {
  //對car對象執(zhí)行某些操作
}
  • Boolean類型
    該類型只有true和false兩個字面值,區(qū)分大小寫。
  • Number類型
/*十進制*/
var intNum = 55; //整數(shù)

/*
八進制
第一位必須是0,如果字面值中的數(shù)值超出了范圍,那么前導零被忽略,后面的的數(shù)值將會被當作十進制解析
八進制字面量在嚴格模式下是無效的,會導致支持該模式的JavaScript引擎拋出錯誤
*/
var octalNum1 = 070;  //八進制56
var octalNum2 = 079;  //無效的八進制數(shù)值,解析為79

/*
十六進制
十六進制字面值的前兩位必須是0x,后跟任何十六進制數(shù)字(0~9及A~F),字母不區(qū)分大小寫
*/
var hexNum1 = 0xA;  //十六進制的10

/*
浮點數(shù)值
該數(shù)值中必須包含一個小數(shù)點,并且小數(shù)點后面必須至少有一位數(shù)字
*/
var floatNum1 = 1.1;
var floatNum2 = 3.125e7;  //等于31250000

/*
數(shù)值范圍: 5e~1.7976931348623157e+308
如果某次計算的結(jié)果超出了這個范圍,將會被轉(zhuǎn)換成-Infinity或Infinity,不會參與下一次計算
可以使用isFinite()函數(shù)檢測一個屬是不是有窮的,這個函數(shù)的參數(shù)位于最小與最大數(shù)值之間時會返回true
*/
var result = Number.MAX_VALUE + Number.MAX_VALUE;
alert(isFinite(result));  //false

/*
NaN
用于表示一個本來要返回數(shù)值的操作數(shù)未返回值的情況,這樣就不會拋出錯誤
*/
alert(NaN/10);   //NaN,任何涉及NaN的操作都會返回NaN
alert( NaN == NaN);  //false,NaN和任何值都不等,包括其本身
alert(isNaN(NaN)); //true,isNaN()函數(shù)接受一個參數(shù),可檢測該參數(shù)是否“不是數(shù)值”
alert(isNaN(10));  //false(10是一個數(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ù)時,會先調(diào)用對象的valueOf()方法,確定該方法返回的值是否可以轉(zhuǎn)化成數(shù)值,如果不能,則基于這個返回值再調(diào)用toString()方法,再測試返回值*/

/*
數(shù)值轉(zhuǎn)換
有三個函數(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(十六進制)
var num4 = parseInt(22.5);  //22
var num5 = parseInt("070");  //56(八進制)
var num6 = parseInt("70");  //70(十進制)

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類型用于表示由零或多個16位Unicode字符組成的字符序列,即字符串,可以用雙引號(“)或單引號(‘)表示。
/*字符字面量*/
\n  //換行
\t  //制表
\b  //退格
\r  //回車
\f  //進紙
\\  //斜杠
\'  //單引號('),在用單引號次奧是的字符串中使用
\\"  //雙引號("),在用雙引號次奧是的字符串中使用
\xnn  //以十六進制代碼nn表示的一個字符(其中n為0~F)。例如,\x41表示“A”
\unnn  //以十六進制代碼nnnn表示的一個Unicode字符(其中n為0~F)。例如 ,\u03a3表示希臘字符Σ

/*
字符串的特點
字符串一旦創(chuàng)建,它們的值就不能改變,要改變某個變量保存的字符串,首席按要銷毀原來的字符串,然后再用一個包含新值的字符串填充該變量
*/
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"
  • Object類型
/*創(chuàng)建自定義對象*/
var 0 = new Object();

/*Object的每個實例都具有以下屬性和方法*/
constructor  //保存用于創(chuàng)建當前對象的函數(shù)。對于當前例子而言,構(gòu)造函數(shù)就是Object()。
hasOwnProperty(propertyName)  //用于檢查給定的屬性當前對象實例中是否存在。作為參數(shù)的屬性名必須以字符串形式指定。
isPrototypeOf(object)  //用于檢查傳入的對象是否是當前對象的原型。
propertyIsEnumerable(propertyName)  //用于檢查給定的屬性是否能夠使用for-in語句來枚舉。與hasOwnProperty()方法一樣,作為參數(shù)的屬性名必須以字符串形式指定。
toLocalString  //返回對象的字符串表示,該字符串與執(zhí)行環(huán)境的地區(qū)對應。
toString  //返回對象的字符串表示。
valueOf  //返回對象的字符串、數(shù)值或布爾值類型。通常與toString()方法的返回值相同。
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

友情鏈接更多精彩內(nèi)容