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

嚴格模式

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

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

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一個字符串
  • 在函數中定義變量時要注意變量的作用域。
fuction test() {
  var message = "hi"; //在函數體內使用var定義的變量為局部變量
}
test();
alert(message); //此時會報錯,因為局部變量在test函數退出后就會被銷毀

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

JavaScript數據類型--使用typeof操作符可以檢測變量的數據類型

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

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

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

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

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

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

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

/*
NaN
用于表示一個本來要返回數值的操作數未返回值的情況,這樣就不會拋出錯誤
*/
alert(NaN/10);   //NaN,任何涉及NaN的操作都會返回NaN
alert( NaN == NaN);  //false,NaN和任何值都不等,包括其本身
alert(isNaN(NaN)); //true,isNaN()函數接受一個參數,可檢測該參數是否“不是數值”
alert(isNaN(10));  //false(10是一個數值)
alert(isNaN(“10”));  //false(可以被轉換成數值10)
alert(isNaN(“blue”));  //true(不能被轉換成數值)
alert(isNaN(true));  //false(可以被轉換成數值1)
/*因此,在調用isNaN()函數時,會先調用對象的valueOf()方法,確定該方法返回的值是否可以轉化成數值,如果不能,則基于這個返回值再調用toString()方法,再測試返回值*/

/*
數值轉換
有三個函數可以把非數值轉換為數值: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表示希臘字符Σ

/*
字符串的特點
字符串一旦創建,它們的值就不能改變,要改變某個變量保存的字符串,首席按要銷毀原來的字符串,然后再用一個包含新值的字符串填充該變量
*/
var lang = "Java";
lang = lang + "Script";
alert(lang);  //JavaScript

/*轉換為字符串toString()方法和Sting()方法*/
var age  = 11;
var ageString = age.toString();  //字符串“11”
var found = true;
var foundString = found.toString();  //字符串“true”

/*在不知道要轉換的值是不是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類型
/*創建自定義對象*/
var 0 = new Object();

/*Object的每個實例都具有以下屬性和方法*/
constructor  //保存用于創建當前對象的函數。對于當前例子而言,構造函數就是Object()。
hasOwnProperty(propertyName)  //用于檢查給定的屬性當前對象實例中是否存在。作為參數的屬性名必須以字符串形式指定。
isPrototypeOf(object)  //用于檢查傳入的對象是否是當前對象的原型。
propertyIsEnumerable(propertyName)  //用于檢查給定的屬性是否能夠使用for-in語句來枚舉。與hasOwnProperty()方法一樣,作為參數的屬性名必須以字符串形式指定。
toLocalString  //返回對象的字符串表示,該字符串與執行環境的地區對應。
toString  //返回對象的字符串表示。
valueOf  //返回對象的字符串、數值或布爾值類型。通常與toString()方法的返回值相同。
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 230,501評論 6 544
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 99,673評論 3 429
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 178,610評論 0 383
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,939評論 1 318
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 72,668評論 6 412
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 56,004評論 1 329
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 44,001評論 3 449
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 43,173評論 0 290
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 49,705評論 1 336
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 41,426評論 3 359
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,656評論 1 374
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 39,139評論 5 364
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,833評論 3 350
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 35,247評論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,580評論 1 295
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 52,371評論 3 400
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,621評論 2 380