JS基礎(chǔ)之基本概念1

變量

ECMAScript中的變量是松散類型的,所謂松散類型就是可以用來保存任何類型的數(shù)據(jù)。換句話說也颤,每個變量僅僅是一個用于保存值的占位符炫隶。
var可以聲明一個變量,一般情況下,要想聲明的變量變得有意義少漆,必須得初始化厅须,即給變量賦值侧馅。
有一點必須注意危尿,即用var操作符定義的變量將成為定義該變量的作用域中局部變量。也就是說馁痴,如果在函數(shù)中使用var定義一個變量谊娇,那么這個變量在函數(shù)執(zhí)行完之后,會被立即銷毀罗晕,回收其占用的內(nèi)存济欢。例如:

function test(){
   var message = 'hello world'//不用var操作符聲明的變量,會變成全局變量
  console.dir(message)
}
test();

test函數(shù)運行以后小渊,變量message會被垃圾清除機制清除法褥,釋放其內(nèi)存。

數(shù)據(jù)類型

5種簡單數(shù)據(jù)類型:String,Number,Boolean,Undefined,Null
1中復雜數(shù)據(jù)類型:Object
一般情況下酬屉,會用typeof操作符檢測給定變量的數(shù)據(jù)類型半等。
當調(diào)用typeof null時候,會返回object,因為null本質(zhì)上是空對象呐萨,程序上標明此變量在未來指向的變量是一個對象杀饵。
這里有幾點需要注意:
1.檢測函數(shù)的時候:

function test(){};
console.log(typeof test)//'function'

當用typeof檢測一個函數(shù)的時候,會返回‘‘第六種數(shù)據(jù)類型’’谬擦,為什么會用引號括起來呢切距,因為從技術(shù)角度來說,函數(shù)在ECMAScript中是對象惨远,不是一種數(shù)據(jù)類型谜悟。然而,函數(shù)也確實有一些特殊的屬性北秽,因此通過typeof操作符來區(qū)分函數(shù)和其他對象是有必要的赌躺。
2.檢測數(shù)組的時候:

var arr = [1,2,3];
console.log(typeof arr)//'object'

當用typeof檢測的變量是一個數(shù)組時候,會直接返回object羡儿。所以數(shù)組也是對象的一種,同是復雜數(shù)據(jù)類型是钥。

Undefined類型

Undefined類型只有一個值掠归,即特殊的undefined
這里有一點需要注意:在使用var聲明變量但未對其初始化時悄泥,這個變量的值就是undefined虏冻。

var message;
alert(message == undefined)//true

引入這個值是為了正式區(qū)分空對象指針和未初始化的變量。

Null類型

Null類型是第二種只有一個值的數(shù)據(jù)類型弹囚,這個特殊值就是null厨相。
實際上,undefined是派生自null值的。因此undefined == null蛮穿。
上文提到庶骄,如果定義的變量準備在將來用于保存對象,那么最好將該變量初始化為null而不是其他值践磅。這樣单刁,在復雜的業(yè)務邏輯
中,debug代碼判定動態(tài)數(shù)據(jù)類型時候府适,只要直接檢測null值就可以知道相應的變量是否已經(jīng)保存了一個對象的引用羔飞。

Boolean類型

Boolean類型是使用的最多的一種類型,有兩個值:truefalse檐春。
Boolean類型的字面值truefalse是區(qū)分大小寫的逻淌,也就是TrueFalse都不是Boolean的值,只是標識符疟暖。
想要講一個值轉(zhuǎn)換為對應的Boolean值卡儒,可以用Boolean()
以下給出各種數(shù)據(jù)類型及其對應的轉(zhuǎn)換規(guī)則:

WechatIMG1804.jpeg

Number類型

整數(shù)

最基本的數(shù)值字面量格式是十進制的誓篱,除了以十進制表示以外朋贬,證書還可以通過八進制和十六進制的字面值來表示。其中窜骄,八進制字面值第一位必須是零锦募,然后是八進制數(shù)字序列(0-7)。如果字面數(shù)值超出了范圍邻遏,那么前導零將被忽略糠亩,后面的數(shù)值將被當做十進制數(shù)值解析。八進制字面量在嚴格模式下是無效的准验,會拋出錯誤赎线。十六進制字面量的前兩位必須是0x,后跟任何十六進制數(shù)字(0-9及A-F)糊饱,其中垂寥,字母A-F可以大寫也可以小寫。
不過在進行算數(shù)計算時另锋,所有以八進制和十六進制表示的數(shù)值都會轉(zhuǎn)換為十進制數(shù)值滞项。

浮點數(shù)

由于保存浮點數(shù)值需要的內(nèi)存空間是保存整數(shù)數(shù)值的兩倍,所以ECMAScript會把浮點數(shù)轉(zhuǎn)為整數(shù)顯示夭坪。例如:

var float1 = .1;
var float2  = 10.0;
console.log(float1)//1
console.log(float2)//10

對于那些極大或者極小的數(shù)值文判,可以用科學計數(shù)法表以浮點數(shù)值的形式來表示。例如:

var floatNum = 1.234e6;  //等于1234000

即e前面的數(shù)值乘以e后面數(shù)值的10的指數(shù)次冪室梅。極小數(shù)同理戏仓,只不過是除以10的指數(shù)次冪疚宇。
由于浮點數(shù)值的最高精度是17位小數(shù),但是在進行算數(shù)計算的精確度缺遠不如整數(shù)赏殃,所以不建議用0.1+0.2==0.3這樣的判斷敷待。

數(shù)值范圍

數(shù)值類型的數(shù)據(jù)有大小之分,或是無窮大或是無窮小或是在這兩者之間嗓奢。ECMAScript能夠表示的最小數(shù)值保存在Number.MIN_VALUE中-在大多數(shù)瀏覽器中讼撒,這個值是5e-324,能夠表示的最大數(shù)值保存在Number.MAX_VALUE中-在大多數(shù)瀏覽器中股耽,這個值是1.7976931348623157e+308根盒。
如果一旦超出了javascript數(shù)值范圍,這個值是正數(shù)物蝙,則用Infinity(正無窮)表示炎滞,這個值是負數(shù),則用-Infinity(負無窮)表示诬乞。
如果想要確定一個數(shù)值類型的值是否是有窮的册赛,可以使用isFinite()這個函數(shù)。如果這個函數(shù)的參數(shù)位于最大與最小數(shù)值之間會返回true震嫉。

NaN

NaN即非數(shù)值(Not a Number)森瘪,是一個特殊的數(shù)值。typeof NaN == 'number'
NaN本身有兩個特點:
1.任何涉及NaN的操作都會返回NaN票堵。
2.NaN與任何值都不相等扼睬,包括它自己。

alert(NaN == NaN)//false

ECMAScript定義了一個isNaN()函數(shù)悴势,用來判斷一個數(shù)值是否 ’不是數(shù)值‘窗宇,這個函數(shù)在接受一個參數(shù)之后,會先進行轉(zhuǎn)換操作特纤,轉(zhuǎn)換為數(shù)值军俊。

數(shù)值轉(zhuǎn)換

有三個函數(shù)可以把非數(shù)值轉(zhuǎn)換為數(shù)值:Number(),parseInt(),parseFloat()
其中捧存,Number()函數(shù)可以用于任何數(shù)據(jù)類型粪躬,而后兩者則專門用于字符串轉(zhuǎn)換為數(shù)值。
Number():
Number()轉(zhuǎn)換規(guī)則如下:
1.如果是Boolean類型值昔穴,truefalse會被轉(zhuǎn)換為10镰官。
2.如果是數(shù)字,只是簡單的傳入和返回傻咖。即Number(10.11) == 10.11
3.如果是null岖研,返回0卿操。
4.如果是字符串警检,則遵循以下規(guī)則:
a:如果只包含數(shù)字,則轉(zhuǎn)換為十進制數(shù)值害淤,例如 Number('23411') == 23411扇雕。
b:如果字符串中包含有效的浮點格式,則將其轉(zhuǎn)換為對應的浮點數(shù)值窥摄,例如Number('1.1') == 1.1镶奉。
c:如果字符串中包含有效的十六進制格式,則將起轉(zhuǎn)換為相同大小的十進制整數(shù)崭放。
d:如果字符串是空的哨苛,則將起轉(zhuǎn)換為0。
e:如果字符串中包含除上述格式之外的字符币砂,則將其轉(zhuǎn)換為NaN建峭。
parseInt():
parseInt()函數(shù)在轉(zhuǎn)換字符串時,更多的是看其是否符合數(shù)值模式决摧,其轉(zhuǎn)換規(guī)則如下:
1.忽略字符串前面的空格亿蒸。
2.如果字符串中第一個字符不是數(shù)字字符或者負號,則返回NaN掌桩,例如parseInt(a123) == NaN边锁。
3.如果字符串中第一個字符是數(shù)字,則會繼續(xù)解析第二個字符波岛,知道解析完所有后續(xù)字符或者遇到一個非數(shù)字字符茅坛,例如parseInt('123abc345') == 123
parseInt()函數(shù)還會接收第二個參數(shù)盆色,用于表示轉(zhuǎn)化字符串時灰蛙,用哪個進制,以十進制或者八進制或者十六進制進行轉(zhuǎn)換隔躲。例如:

var num1 = parseInt('10',2) //2(按照二進制解析)
var num2 = parseInt('10',8) //8(按照八進制解析)
var num3 = parseInt('10',10) //10(按照十進制解析)
var num4 = parseInt('10',16) //16(按照十六進制解析)

parseFloat()
parseFloat()也是從第一個字符開始進行解析摩梧。一直解析到字符串末尾或者解析到遇見一個無效的浮點數(shù)字字符為止,也就是第一個小數(shù)點有效宣旱,第二個無效仅父。例如parseFloat('123.12.3') == 123.12
除了第一個小數(shù)點有效以外浑吟,parseInt()parseFloat()的第二個區(qū)別在于它始終會忽略前導零笙纤,即假如這個字符串是十六進制值,parseFloat()始終會吧十六進制值轉(zhuǎn)換為0组力。
parseFloat()只解析十進制值省容,因此沒有第二個參數(shù)的用法。
最后還要注意一點:如果字符串包含的是一個可解析為整數(shù)的數(shù)(沒有小數(shù)點燎字,或者小數(shù)點后都是零)腥椒,parseFloat()會返回整數(shù)阿宅。

String類型

String類型即字符串。必須由雙引號或者單引號表示笼蛛。
任何字符串的長度都可以通過訪問其length屬性獲得洒放。
要把一個值轉(zhuǎn)換為字符串有兩種方法。
1.toString()方法:
數(shù)值滨砍,布爾值往湿,對象和字符串值都有toString()方法,但是nullundefined值沒有這個方法惋戏。
2.String()方法:
在不知道要轉(zhuǎn)換的值是不是null或者undefined的情況下领追,還可以使用轉(zhuǎn)型函數(shù)String(),這個函數(shù)能夠?qū)⑷魏晤愋偷闹缔D(zhuǎn)換為字符串日川。轉(zhuǎn)換規(guī)則如下:
a:如果值有toString()方法蔓腐,則返回相應的結(jié)果。
b:如果是null龄句,則返回null(null的字面量)
c:如果是undefined回论,則返回undefined(undefined的字面量)

Object類型

ECMAScript中的對象其實就是一組數(shù)據(jù)和功能的集合。前面提到的函數(shù)也可以稱之為對象分歇,但是函數(shù)不能稱為數(shù)據(jù)類型傀蓉。對象可以通過new操作符后面跟要創(chuàng)建的對象類型的名稱來創(chuàng)建。例如var obj = new Object()职抡。
創(chuàng)建Object類型的實例并為其添加屬性或者方法葬燎,就可以創(chuàng)建自定義的對象。而且缚甩,可以為對象動態(tài)的添加屬性和方法谱净。
Object類型所具有的任何屬性和方法同樣存在于更劇透的對象或者實例中。
1.constructor:保存用于創(chuàng)建當前對象的函數(shù)擅威,即構(gòu)造函數(shù)壕探。對于前面的例子而言,obj.constructor == Object()郊丛。
2.hasOwnProperty(propertyname):用于檢查給定的屬性在當前對象實例中是否存在(而不是在實例的原型中)李请,返回值為Boolean。其中propertyname必須是字符串形式厉熟。
3.isPrototypeOf(object):用于檢查傳入的對象是否是當前對象的原型导盅。返回值是Boolean類型。
當然揍瑟。還有其他幾個方法白翻,不過這里只提出來常用的幾個方法和屬性。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末绢片,一起剝皮案震驚了整個濱河市滤馍,隨后出現(xiàn)的幾起案子恩急,更是在濱河造成了極大的恐慌,老刑警劉巖纪蜒,帶你破解...
    沈念sama閱讀 212,454評論 6 493
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異此叠,居然都是意外死亡纯续,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,553評論 3 385
  • 文/潘曉璐 我一進店門猬错,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人茸歧,你說我怎么就攤上這事倦炒≈鳎” “怎么了伍茄?”我有些...
    開封第一講書人閱讀 157,921評論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長整葡。 經(jīng)常有香客問我遭居,道長啼器,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,648評論 1 284
  • 正文 為了忘掉前任俱萍,我火速辦了婚禮端壳,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘枪蘑。我一直安慰自己损谦,他們只是感情好,可當我...
    茶點故事閱讀 65,770評論 6 386
  • 文/花漫 我一把揭開白布岳颇。 她就那樣靜靜地躺著照捡,像睡著了一般。 火紅的嫁衣襯著肌膚如雪话侧。 梳的紋絲不亂的頭發(fā)上栗精,一...
    開封第一講書人閱讀 49,950評論 1 291
  • 那天,我揣著相機與錄音瞻鹏,去河邊找鬼悲立。 笑死,一個胖子當著我的面吹牛新博,可吹牛的內(nèi)容都是我干的级历。 我是一名探鬼主播,決...
    沈念sama閱讀 39,090評論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼叭披,長吁一口氣:“原來是場噩夢啊……” “哼寥殖!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起涩蜘,我...
    開封第一講書人閱讀 37,817評論 0 268
  • 序言:老撾萬榮一對情侶失蹤嚼贡,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后同诫,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體粤策,經(jīng)...
    沈念sama閱讀 44,275評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,592評論 2 327
  • 正文 我和宋清朗相戀三年误窖,在試婚紗的時候發(fā)現(xiàn)自己被綠了叮盘。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,724評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡霹俺,死狀恐怖柔吼,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情丙唧,我是刑警寧澤愈魏,帶...
    沈念sama閱讀 34,409評論 4 333
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響培漏,放射性物質(zhì)發(fā)生泄漏溪厘。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 40,052評論 3 316
  • 文/蒙蒙 一牌柄、第九天 我趴在偏房一處隱蔽的房頂上張望畸悬。 院中可真熱鬧,春花似錦珊佣、人聲如沸傻昙。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,815評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至僻爽,卻和暖如春虫碉,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背胸梆。 一陣腳步聲響...
    開封第一講書人閱讀 32,043評論 1 266
  • 我被黑心中介騙來泰國打工敦捧, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人碰镜。 一個月前我還...
    沈念sama閱讀 46,503評論 2 361
  • 正文 我出身青樓兢卵,卻偏偏與公主長得像,于是被迫代替她去往敵國和親绪颖。 傳聞我的和親對象是個殘疾皇子秽荤,可洞房花燭夜當晚...
    茶點故事閱讀 43,627評論 2 350

推薦閱讀更多精彩內(nèi)容

  • 第2章 基本語法 2.1 概述 基本句法和變量 語句 JavaScript程序的執(zhí)行單位為行(line),也就是一...
    悟名先生閱讀 4,132評論 0 13
  • 什么是 JavaScript 語言柠横? JavaScript 是一種輕量級的腳本語言窃款。所謂“腳本語言”(script...
    oWSQo閱讀 1,789評論 0 1
  • 1晨继、標識符 標識符是指變量、函數(shù)搬俊、屬性的名字紊扬,或函數(shù)的參數(shù)。 格式規(guī)則: 第一個字符必須是一個字母唉擂、下劃線(_)或...
    風中丶凌亂閱讀 1,622評論 0 0
  • 山水踏盡尋一籃霞草 于繁花堤上高歌酌酒 慢慢地從時光里走出來 寧靜而致遠 奏一曲玲瓏心思 溫馨肆意迷離 于心中藏一...
    癡人一念閱讀 629評論 6 23
  • 圖片發(fā)自簡書App 思念 我想把你吞下 讓你游走于我身體的每一個細胞 最后和你融為一體 你的背影 你的背影猶如一座...
    詩路閱讀 548評論 0 1