第一篇 關于基本概念

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

JavaScript的基本數(shù)據(jù)類型有undefined瓣戚、null端圈、booleannumber子库、string以及一種較為復雜的數(shù)據(jù)類型object舱权。
由于JS的數(shù)據(jù)類型是松散類型的,因此需要使用typeof操作符對數(shù)據(jù)類型進行檢測仑嗅,這里著重提一下:

  typeof null                // "object"
  typeof function            // "function"

函數(shù)盡管不是一種數(shù)據(jù) 類型宴倍,但由于其特殊的屬性,有必要與其他數(shù)據(jù)類型進行區(qū)分仓技。

1.1.1 Undefined

在變量聲明但未定義時鸵贬,內(nèi)部會自動為其賦值為undefined。不過脖捻,包含undefined值的變量與未聲明的變量之間仍然存在一些差別阔逼,我們來看下面兩段代碼:

  var message                // 該變量聲明后默認為undefined
  // age 為未聲明的變量
  alert( message )           // "undefined"
  alert( age )               // 發(fā)生錯誤
  var message                // 該變量聲明后默認為undefined
  // age 為未聲明的變量
  typeof message             // "undefined"
  typeof age                 // "undefined"

雖然在alert中age會產(chǎn)生錯誤,但在typeof中未聲明的age也會返回undefined值地沮,這是比較奇怪的現(xiàn)象嗜浮!同時,typeof是唯一地能對未聲明變量進行的操作摩疑。

1.1.2 Null

null值表示一個空對象的指針危融,undefined實際上派生自null值,在JS的相等性測試中未荒,兩者是相等的专挪,注意這里的相等(==)全等(===)不同。

  null == undefined          // true

1.1.3 Boolean

Boolean類型分為兩種片排,即true和false寨腔,這里要注意大小寫,Boolean是對大小寫敏感的率寡。
在不同數(shù)據(jù)類型中迫卢,Boolean類型有不同的表現(xiàn)形式,具體見下表冶共。

數(shù)據(jù)類型 轉(zhuǎn)換為true的值 轉(zhuǎn)換為false的值
Boolean true false
String 非空字符串 " " ( 空字符串 )
Number 非零數(shù)字和無窮大 0或NaN
Object 任何對象 null
Undefined n/a undefined

上表中Undefined一行中乾蛤,n/a是not applicable的縮寫每界,意為 “ 不適用 ”

1.1.4 Number

Number類型使用IEEE754格式來表示整數(shù)和浮點數(shù)。浮點數(shù)的最高精度是17位小數(shù)家卖,但在進行計算時它的精度遠遠不如整數(shù)眨层,如0.1+0.2的結(jié)果不是0.3,而是0.30000000000000004上荡。

  if ( a+b == 0.3 ) {            // 返回false趴樱,因此不要做這種測試!
      alert ( " you got 0.3 " )
  }

在JavaScript中酪捡,存在能夠保存的最大值Number.MAX_VALUE和最小值Number.MIN_VALUE叁征,超過這兩個值即為Infinity-Infinity

該類型中有一個特殊的數(shù)值逛薇,即NaN(Not a Number)捺疼,該值是為了防止在數(shù)值計算中返回非數(shù)值的情況,其本身有兩個特點永罚。

  • 涉及NaN的操作均會返回NaN啤呼;
  • NaN與任何值都不想等,包括它自己尤蛮。

數(shù)值轉(zhuǎn)換:Number ( )媳友、parserInt ( )斯议、parserFloat ( )之間的比較产捞。Number ( )可以接受任何數(shù)據(jù)類型,而parserInt ( )哼御、parserFloat ( )只能接受字符串類型

  • ** Number ( ) **
  1. true => 1
  2. false 或 null => 0
  3. undefined => NaN
  4. string => 若為數(shù)字(包括二進制坯临、十進制、八進制恋昼、十六進制和浮點數(shù))看靠,均轉(zhuǎn)換成十進制對應的數(shù)字;若為空字符串(" ")液肌,轉(zhuǎn)換為0挟炬;其他情況,均轉(zhuǎn)換為NaN
  5. object => 先調(diào)用valueOf( )方法嗦哆,依次按照之前的規(guī)則進行轉(zhuǎn)換谤祖,若返回為NaN,則調(diào)用toString( )方法老速,再依次按照前面的規(guī)則進行轉(zhuǎn)換
  • parserInt ( )parserFloat ( )
    parserInt ( )從第一個不為空格的數(shù)字字符開始檢測粥喜,直到檢測到非數(shù)字字符為止,它可以解析不同進制的數(shù)值橘券,并返回對應十進制的值额湘,通過傳入第二個參數(shù)卿吐,即進制值來實現(xiàn);相比之下锋华,parserFloat ( )只能解析十進制的浮點數(shù)嗡官,且能解析第一個小數(shù)點,遇到第二個小數(shù)點會自動忽略毯焕。

下面是一些常見的例子:

  Number( "Hello World" )        // NaN
  Number( undefined )            // NaN
  Number( " " )                  // 0
  Number( "0000011" )            // 11
  Number( true )                 // 1
  parseInt( "1234Joker" )        // 1234
  parseInt( " " )                // 0
  parseInt( "0xA" )              // 10
  parseInt( 22.5 )               // 22
  parseInt( "70" )               // 70
  parseInt( "10", 2 )            // 2
  parseInt( "10", 8 )            // 8
  parseInt( "10", 10 )           // 10
  parseInt( "10", 16 )           // 16
  parseFloat( "0xA" )            // 0
  parseFloat( "22.5" )           // 22.5
  parseFloat( "22.4.5" )         // 22.4

1.1.5 String

String類型用于表示由零個或多個16位字符組成的Unicode字符組成的字符序列谨湘,即字符串〗嫔ィ可以用(")或者(')紧阔,但兩邊的引號類型要相等。字符串帶有length屬性续担,用于表示字符串的長度擅耽。

要想將別的數(shù)據(jù)類型如數(shù)值、布爾值物遇、對象和字符串轉(zhuǎn)換為字符串類型乖仇,可以使用toString( )方法,不過null和undefined值沒有這個方法询兴,需要使用轉(zhuǎn)型函數(shù)String( )乃沙。

1.1.6 Object

簡單來說,對象即為一組數(shù)據(jù)和功能的集合诗舰,關于對象的具體內(nèi)容警儒,會在后續(xù)文章中進行闡述

1.2 操作符

1.2.1 一元操作符

  • 遞增和遞減操作符
    這種操作符又各自分為兩種,前置型和后置型眶根,下面以遞減為例
  var num1 = 2;
  var num2 = 20;
  var num3 = --num1 + num2;      // 等于21
  var num4 = num1 + num2;        // 等于21
  var num1 = 2;
  var num2 = 20;
  var num3 = num1-- + num2;      // 等于22
  var num4 = num1 + num2;        // 等于21

從上面的代碼中可以看出蜀铲,前置型操作符使用num-1進行運算,而后置型操作符則使用num進行運算属百。此外记劝,這四個操作符對任何值均有效。

  • 一元加和減操作符

加操作符對數(shù)值不會有任何影響族扰,減操作符主要用于表示負數(shù)厌丑,這兩個操作符應用于非數(shù)值類型的值時,其轉(zhuǎn)換規(guī)則與Number( )相同渔呵,這里不再贅述怒竿。

1.2.2 布爾操作符

布爾操作符一共有三種:非(NOT)、與(AND)厘肮、或(OR)

  • 邏輯非
數(shù)據(jù)類型 返回值
空字符轉(zhuǎn)愧口、數(shù)值0、null类茂、NaN耍属、undefined true
對象托嚣、非空字符串、非0數(shù)值(包括Infinity) false
  • 邏輯與
    可以應用于任何數(shù)據(jù)類型厚骗,不一定返回布爾值示启,具體規(guī)則:

1.若第一個操作數(shù)是對象,則返回第二個操作數(shù)领舰;
2.若第二個操作數(shù)是對象夫嗓,則只有當?shù)谝粋€操作數(shù)返回true的情況下才返回該對象;
3.若兩個操作數(shù)都是對象冲秽,則返回第二個操作數(shù)舍咖;
4.若第一個操作數(shù)是nulll,則返回null锉桑;
5.若第一個操作數(shù)是NaN排霉,則返回NaN;
6.若第一個操作數(shù)是undefined民轴,則返回undefined攻柠。

  • 邏輯或
    可以應用于任何數(shù)據(jù)類型,不一定返回布爾值后裸,具體規(guī)則:

1.若第一個操作數(shù)是對象瑰钮,則返回第一個操作數(shù);
2.若第一個操作數(shù)求值為false微驶,則返回第二個操作數(shù)浪谴;
3.若兩個操作數(shù)都是對象,則返回第一個操作數(shù)祈搜;
4.若兩個操作數(shù)都是null较店,則返回null;
5.若兩個操作數(shù)都是NaN容燕,則返回NaN;
6.若兩個操作數(shù)都是undefined婚度,則返回undefined蘸秘。

邏輯與邏輯或都屬于短路操作,即如果第一個操作數(shù)能決定結(jié)果蝗茁,那么不會對第二個操作數(shù)求值醋虏。

1.2.3 乘性操作符

乘性操作符總共有三種:乘法、除法和求模哮翘。這里只列舉一些較為特殊的用法颈嚼。
乘法:

  • 若有一個操作數(shù)為NaN,則返回NaN饭寺;
  • 若是Infinity與0相乘阻课,則返回NaN叫挟;
  • 若是Infinity與非0數(shù)相乘,則返回Infinity或者-Infinity

除法:

  • 若是Infinity被Infinity除限煞,則返回NaN抹恳;
  • 若是0被0除,則返回NaN署驻;
  • 若是非零的有限數(shù)被0除奋献,則返回Infinity或者-Infinity

1.2.4 加性操作符

特殊用法:

  Infinity + Infinity           // Infinity
  -Infinity + -Infinity         // -Infinity
  Infinity + -Infinity          // NaN
  +0 + +0          // +0
  +0 + -0          // +0
  -0 + -0          // -0

另外,當加性運算符遇到字符串時旺上,就會將其他數(shù)據(jù)類型轉(zhuǎn)換成字符串類型瓶蚂,然后進行拼接

  "" + 123 + 456         // 123456

1.2.5 關系操作符

關系操作符主要有小于(<)宣吱、大于(>)扬跋、小于等于(<=)、大于等于(>=)凌节,這些操作符均返回一個布爾值钦听。

需要注意:

  1. 若兩邊均為字符串,則比較兩個字符串的編碼值倍奢;
  2. 若又一個操作數(shù)為數(shù)值朴上,則領一個操作數(shù)轉(zhuǎn)換成數(shù)值再進行比較。
  var res = "Brick" < "alphabet"         // true
  var res2 = "23" < "3"                  // true

還有一個比較有意思的現(xiàn)象卒煞,根據(jù)規(guī)則痪宰,NaN與任何值進行比較均返回false,所以:

  var res1 = NaN < 3            // false
  var res2 = NaN >= 3           // false

1.2.6 相等操作符

相等操作符可以分為兩組畔裕,一種為相等和不想等(== 和 !=)衣撬,另一種為全等和不全等(=== 和 !==)。== 和 != 會先轉(zhuǎn)換數(shù)操作數(shù)(稱為強制轉(zhuǎn)型)扮饶,然后再比較它們的相等性具练;而 === 和 !== 則要求相比較的兩個操作數(shù)類型和值均相等。
下面列舉一些相等操作符的特殊用法:

  null == undefined             // true
  "NaN" == NaN                  // false
  5 == NaN                      // false
  NaN == NaN                    // false
  NaN != NaN                    // true
  false == 0                    // true
  true == 1                     // true
  true == 2                     // false
  undefined == 0                // false
  null == 0                     // false
  "5" == 5                      // true
  "5" === 5                     // false

除以上幾種操作符以外甜无,javascript還提供了條件操作符扛点、賦值操作符、逗號操作符岂丘,由于這幾種操作符較為簡單陵究,這里不進行詳細介紹。

最后編輯于
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末奥帘,一起剝皮案震驚了整個濱河市铜邮,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖松蒜,帶你破解...
    沈念sama閱讀 218,755評論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件扔茅,死亡現(xiàn)場離奇詭異,居然都是意外死亡牍鞠,警方通過查閱死者的電腦和手機咖摹,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,305評論 3 395
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來难述,“玉大人萤晴,你說我怎么就攤上這事⌒埠螅” “怎么了店读?”我有些...
    開封第一講書人閱讀 165,138評論 0 355
  • 文/不壞的土叔 我叫張陵,是天一觀的道長攀芯。 經(jīng)常有香客問我屯断,道長,這世上最難降的妖魔是什么侣诺? 我笑而不...
    開封第一講書人閱讀 58,791評論 1 295
  • 正文 為了忘掉前任殖演,我火速辦了婚禮,結(jié)果婚禮上年鸳,老公的妹妹穿的比我還像新娘趴久。我一直安慰自己,他們只是感情好搔确,可當我...
    茶點故事閱讀 67,794評論 6 392
  • 文/花漫 我一把揭開白布彼棍。 她就那樣靜靜地躺著,像睡著了一般膳算。 火紅的嫁衣襯著肌膚如雪座硕。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,631評論 1 305
  • 那天涕蜂,我揣著相機與錄音华匾,去河邊找鬼。 笑死宇葱,一個胖子當著我的面吹牛瘦真,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播黍瞧,決...
    沈念sama閱讀 40,362評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼原杂!你這毒婦竟也來了印颤?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,264評論 0 276
  • 序言:老撾萬榮一對情侶失蹤穿肄,失蹤者是張志新(化名)和其女友劉穎年局,沒想到半個月后际看,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,724評論 1 315
  • 正文 獨居荒郊野嶺守林人離奇死亡矢否,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,900評論 3 336
  • 正文 我和宋清朗相戀三年仲闽,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片僵朗。...
    茶點故事閱讀 40,040評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡赖欣,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出验庙,到底是詐尸還是另有隱情顶吮,我是刑警寧澤,帶...
    沈念sama閱讀 35,742評論 5 346
  • 正文 年R本政府宣布粪薛,位于F島的核電站悴了,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏违寿。R本人自食惡果不足惜湃交,卻給世界環(huán)境...
    茶點故事閱讀 41,364評論 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望藤巢。 院中可真熱鬧搞莺,春花似錦、人聲如沸菌瘪。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,944評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽俏扩。三九已至糜工,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間录淡,已是汗流浹背捌木。 一陣腳步聲響...
    開封第一講書人閱讀 33,060評論 1 270
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留嫉戚,地道東北人刨裆。 一個月前我還...
    沈念sama閱讀 48,247評論 3 371
  • 正文 我出身青樓,卻偏偏與公主長得像彬檀,于是被迫代替她去往敵國和親帆啃。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 44,979評論 2 355

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