JS 變量/數(shù)據(jù)類型/基本語法/異常

變量

由于是動(dòng)態(tài)類型語言挑格,所以變量定義了以后蜡励,可以隨意更改類型

變量聲明

常用的聲明關(guān)鍵字有var/let,下面來說明兩者的區(qū)別:

  • var:聲明一個(gè)變量漱挚,沒有代碼塊作用域的束縛(函數(shù)內(nèi)部聲明則為局部變量),可重復(fù)聲明渺氧,自從ES6出了let關(guān)鍵字以后旨涝,盡量不要用var進(jìn)行定義
  • let:在當(dāng)前代碼塊聲明一個(gè)變量,有作用域的概念侣背,并且不能重復(fù)聲明
    舉例:
var a = 1;
var a = "sss";
// 可以隨意修改類型白华,并且可以重復(fù)聲明
let b = 2;
let b = 3;
// 這句會(huì)報(bào)錯(cuò):不能重復(fù)聲明b

注:
變量在定義時(shí)也可以不加關(guān)鍵字慨默,兩者的區(qū)別:加關(guān)鍵字代表在當(dāng)前作用域的聲明局部變量,不加關(guān)鍵字定義的話弧腥,如果變量原來存在厦取,則進(jìn)行賦值操作,如果不存在管搪,則定義一個(gè)全局變量(相當(dāng)于window.xxx = yyy;

參考:https://www.cnblogs.com/juejiangWalter/p/5725220.html

常量

常量定義了以后虾攻,如果是一般數(shù)據(jù)類型(如數(shù)字/字符串等)則不能再進(jìn)行修改,而引用類型(如數(shù)組/對(duì)象等)更鲁,則可以改變內(nèi)容

聲明常量

使用 const關(guān)鍵字聲明霎箍,舉例:

const a = {};
a.x = 1;
// 可以修改引用類型常量?jī)?nèi)容
const b = 1;
b = "sss";
// 修改基本數(shù)據(jù)類型常量會(huì)報(bào)錯(cuò)

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

number

數(shù)字,包括整數(shù)澡为、小數(shù)等(基本數(shù)據(jù)類型)

string

字符串(基本數(shù)據(jù)類型)

boolean

布爾類型漂坏,truefalse(小寫)缀壤,其中變量里的數(shù)字0樊拓、空字符串''、空對(duì)象(null)和undefined是false塘慕,其他都是true(基本數(shù)據(jù)類型)

object

對(duì)象(引用類型)筋夏,舉例:

var o = {x:1};
function

函數(shù)

undefined

就是只定義還沒賦值的變量,這個(gè)如果直接放在判斷語句中就屬于false图呢,其他類型都是true(除了bool的false和0以外)条篷,比如:

var a
if(a)
{
    alert("true")
}
else
{
    alert("false")
}
結(jié)果顯示為false
null

數(shù)據(jù)轉(zhuǎn)型

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

通過typeof 變量名查看,舉例::

let a = 10
typeof a
// number
字符串轉(zhuǎn)整數(shù)

parseInt()蛤织,該方法是從左到右取到第一個(gè)不是數(shù)字的內(nèi)容為止赴叹,所以比如:parseInt('12b34'),結(jié)果就是:12

字符串轉(zhuǎn)小數(shù)

parseFloat()
注:
當(dāng)對(duì)不含數(shù)字的字符串強(qiáng)制轉(zhuǎn)型int時(shí)或者數(shù)字和非數(shù)字進(jìn)行操作時(shí)指蚜,會(huì)出現(xiàn)NaN(not a number)乞巧,如果用typeof會(huì)發(fā)現(xiàn)NAN類型竟然還是number,而且NaN之間不相等摊鸡,舉例:

b = parseInt('s')   //是NaN绽媒,c同樣
c = parseInt('a')
b == c
結(jié)果為:false

所以如果要判斷函數(shù)是不是NaN時(shí)不能用==來判斷,有一個(gè)專門的isNaN()方法判斷

eval

可以把一個(gè)變量轉(zhuǎn)成他本應(yīng)該是的類型免猾,比如:'1'+'1'因?yàn)槭莾蓚€(gè)字符串相加是辕,所以結(jié)果是'11',而eval能把他們轉(zhuǎn)成本應(yīng)該是的number型猎提,所以eval('1')+eval('1')結(jié)果就是2获三。
其還能做些更可怕的比如把一段本該是語句的字符串變成語句來執(zhí)行,比如下面這句:

eval('document.body.style.background = "blue"')

結(jié)果這句話就變成了語句執(zhí)行,最后背景就變藍(lán)了

運(yùn)算符

==/===

這兩種都是判斷等于疙教,主要區(qū)別在于第一種會(huì)將兩邊的值轉(zhuǎn)換成同一類型然后進(jìn)行判斷棺聊,第二種則不轉(zhuǎn)換類型直接判斷,相當(dāng)于其他語言的==贞谓,舉例:

var a = 5;
var b = '5';
a == b; //返回true躺屁,其將5轉(zhuǎn)換成string型,然后才比較
a === b;    //返回false经宏,直接比較

上面兩個(gè)等于對(duì)應(yīng)的不等于分別是:!=/!==,即轉(zhuǎn)換后不等的和不轉(zhuǎn)換不等的

基本語法

if
if(條件)
{
    語句
}
else
{
    語句
}
條件?語句1:語句2

三目運(yùn)算符驯击,當(dāng)條件符合時(shí)執(zhí)行語句1烁兰,否則執(zhí)行語句2,相當(dāng)于if的簡(jiǎn)化版

while
while(條件)
{
    語句
}
可選鏈

一個(gè)對(duì)象如果某些屬性不存在徊都,我們直接調(diào)用將可能出現(xiàn)問題沪斟,例如:

a = {};
// 假設(shè)a中的b如果存在則是個(gè)函數(shù),我們就會(huì)調(diào)用它暇矫,這里因?yàn)閎沒有定義主之,所以是undefined,結(jié)果就會(huì)報(bào)錯(cuò)
a.b();

所以我們就可能會(huì)先校驗(yàn)是否存在對(duì)應(yīng)屬性李根,如下:

if (a.b) {
  b();
}

但如果是嵌套的情況槽奕,可能代碼就比較多了,例如下面:

if (a.b) {
  if (a.b.c) {
    if (a.b.c.d) {
      a.b.c.d();
    }
  }
}

此時(shí)我們可以通過return或者邏輯運(yùn)算符的短路方式來優(yōu)化代碼房轿,從而避免過深的嵌套粤攒,例如下面:

if (!a.b) return;
if (!a.b.c) return;
if (!a.b.c.d) return;
a.b.c.d();

但是使用可選鏈能夠更大程度地簡(jiǎn)化代碼,例如上面的代碼可以簡(jiǎn)化如下:

a?.b?.c?.d();

因?yàn)榭蛇x鏈自帶短路特性囱持,如果某一層屬性返回不存在夯接,則不會(huì)繼續(xù)往下繼續(xù)執(zhí)行

for

有幾種寫法:

  • 常用寫法:
for(;;)
{
    ...
}

遍歷對(duì)象key寫法:

for(let k in xxx)
{
    ...
}

遍歷對(duì)象value寫法:

for(let v of xxx)
{
    ...
}
switch
switch(變量)
{
    case x:
        語句
    case y:
        語句
    …
    default:
        語句
}

舉例:

switch(fun.arguments.length)    //判斷函數(shù)fun接收的參數(shù)個(gè)數(shù)
{
    case 0 :        //參數(shù)個(gè)數(shù)為0
        return 0
    case 1 :
        return 1
    default :
        return "error"
}

異常

try

異常,格式和java差不多

try{
    可能異常語句
    }
catch(Exception)
{
    拋出異常
}

補(bǔ)充

可以賦值語句里再賦值

舉例:

a = window.b || (window.b = 10)

相當(dāng)于:

if (window.b) {
  a = window.b;
} else {
  window.b = 10;
  a = window.b;
}
變量和函數(shù)提升

參考:https://segmentfault.com/a/1190000008568071

valueOf/toString隱式調(diào)用

https://www.cnblogs.com/tincyho/p/9582680.html

嚴(yán)格模式

嚴(yán)格模式下的代碼必須遵循一定的規(guī)范才能夠正常執(zhí)行纷妆,并且如this在非嚴(yán)格模式下指向window對(duì)象盔几,而嚴(yán)格模式下為undefined

定義

在開頭加上:"use strict"
注:
嚴(yán)格模式只會(huì)對(duì)其當(dāng)前作用域及其子作用域有影響,例如在函數(shù)里定義使用嚴(yán)格模式掩幢,那么函數(shù)外部不遵循也可以

參考:http://www.reibang.com/p/39e295f4526d

分號(hào)補(bǔ)全機(jī)制

JS解釋器有一個(gè)Semicolon Insertion規(guī)則逊拍,它會(huì)按照一定規(guī)則,在適當(dāng)?shù)奈恢醚a(bǔ)充分號(hào)粒蜈,例如其中幾條自動(dòng)加分號(hào)的規(guī)則:

  • 當(dāng)有換行符(包括含有換行符的多行注釋)顺献,并且下一個(gè)token沒法跟前面的語法匹配時(shí),會(huì)自動(dòng)補(bǔ)分號(hào)
  • 當(dāng)有}時(shí)枯怖,如果缺少分號(hào)注整,會(huì)補(bǔ)分號(hào)
  • 程序源代碼結(jié)束時(shí),如果缺少分號(hào),會(huì)補(bǔ)分號(hào)

例如下面:

function b() {
    return
    {
        a: 'a'
    };
}

console.log(b()); // undefined

會(huì)被解析成:

function b() {
    return;
    {
        a: 'a'
    };
}

console.log(b()); // undefined

參考:http://www.reibang.com/p/e375f0fbb71c

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末肿轨,一起剝皮案震驚了整個(gè)濱河市寿冕,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌椒袍,老刑警劉巖驼唱,帶你破解...
    沈念sama閱讀 206,126評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異驹暑,居然都是意外死亡玫恳,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,254評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門优俘,熙熙樓的掌柜王于貴愁眉苦臉地迎上來京办,“玉大人,你說我怎么就攤上這事帆焕〔研觯” “怎么了?”我有些...
    開封第一講書人閱讀 152,445評(píng)論 0 341
  • 文/不壞的土叔 我叫張陵叶雹,是天一觀的道長(zhǎng)财饥。 經(jīng)常有香客問我,道長(zhǎng)折晦,這世上最難降的妖魔是什么钥星? 我笑而不...
    開封第一講書人閱讀 55,185評(píng)論 1 278
  • 正文 為了忘掉前任,我火速辦了婚禮筋遭,結(jié)果婚禮上打颤,老公的妹妹穿的比我還像新娘。我一直安慰自己漓滔,他們只是感情好编饺,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,178評(píng)論 5 371
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著响驴,像睡著了一般透且。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上豁鲤,一...
    開封第一講書人閱讀 48,970評(píng)論 1 284
  • 那天秽誊,我揣著相機(jī)與錄音,去河邊找鬼琳骡。 笑死锅论,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的楣号。 我是一名探鬼主播最易,決...
    沈念sama閱讀 38,276評(píng)論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼怒坯,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了藻懒?” 一聲冷哼從身側(cè)響起剔猿,我...
    開封第一講書人閱讀 36,927評(píng)論 0 259
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎嬉荆,沒想到半個(gè)月后归敬,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,400評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡鄙早,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,883評(píng)論 2 323
  • 正文 我和宋清朗相戀三年汪茧,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片限番。...
    茶點(diǎn)故事閱讀 37,997評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡陆爽,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出扳缕,到底是詐尸還是另有隱情,我是刑警寧澤别威,帶...
    沈念sama閱讀 33,646評(píng)論 4 322
  • 正文 年R本政府宣布躯舔,位于F島的核電站,受9級(jí)特大地震影響省古,放射性物質(zhì)發(fā)生泄漏粥庄。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,213評(píng)論 3 307
  • 文/蒙蒙 一豺妓、第九天 我趴在偏房一處隱蔽的房頂上張望惜互。 院中可真熱鬧,春花似錦琳拭、人聲如沸训堆。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,204評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽坑鱼。三九已至,卻和暖如春絮缅,著一層夾襖步出監(jiān)牢的瞬間鲁沥,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,423評(píng)論 1 260
  • 我被黑心中介騙來泰國(guó)打工耕魄, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留画恰,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 45,423評(píng)論 2 352
  • 正文 我出身青樓吸奴,卻偏偏與公主長(zhǎng)得像允扇,于是被迫代替她去往敵國(guó)和親缠局。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,722評(píng)論 2 345