js小技巧

js小技巧

1.把變量值轉(zhuǎn)為對(duì)象屬性

var IO = "socket";
var obj = {[IO]: "value"}
console.log(obj);  //{socket: "value"}

在對(duì)象的key位置上面首装, 我們可以使用 [] 將變量套住杭跪,那么變量值就變key了

2. !!的使用

在看一下源碼中涧尿,經(jīng)诚终看到有人用!!, 覺(jué)得奇怪,其實(shí)這個(gè)是非常有用的一種方式瞬内,用于把值轉(zhuǎn)換成 boolean類(lèi)型

這樣有什么用呢虫蝶? 其實(shí)用處是非常大的倦西,很多時(shí)候我們需要類(lèi)型的轉(zhuǎn)化,比如我們從服務(wù)器傳遞數(shù)據(jù)過(guò)來(lái)疼约,可能用0 和 1做 false 和 true的標(biāo)記蝙泼,那么就意味著汤踏,在你的業(yè)務(wù)代碼中,很可能也直接使用0 或者 1, 到時(shí)這是一種非常不好的方式搂擦,很好是用true 或者 false來(lái)進(jìn)行 bool類(lèi)型的判斷哗脖, 而!!恰好提供了非常好的轉(zhuǎn)換方式

!!0  //false
!!1  //true

3.邏輯技巧

邏輯技巧是一個(gè)非常有意思的事情懒熙,下面會(huì)總結(jié)子在開(kāi)發(fā)中常用的邏輯技巧工扎。

  1. 如果存在xx的話肢娘,就返回什么
var ret =  num && num * 2 //如果num存在的話而钞,就返回num *2的值
  1. x存在返回x, x 不存在返回y, y不存在返回z....
var ret = x || y || z
  1. 要么x不存在臼节,要么返回x的某個(gè)屬性值
var ret = !x || x[props]
  1. 利用多個(gè) : ? 代替If else
function match(ele) {
    return ele === 'a' ? "match a"
           :  ele === 'b' ? "match b"
           : ele  === 'c' ? "match c"
           : 'default';
}
match('b')  //match b

4.NaN

這個(gè)在javascript中是一個(gè)意外, 一般來(lái)說(shuō)网缝,一個(gè)值 應(yīng)該和 自身 (等值 或者 全等), 但是 NaN和自身 是 不等值和全等的

NaN == NaN    //false
NaN === NaN  //false

5.==或者===

== 是等值
===是全等
對(duì)于基本數(shù)據(jù)類(lèi)型粉臊,string number等扼仲,判斷相等,我們?nèi)坑?=== 全等判斷
等值有些情況要注意一下

0 == '0'  //true
0 == ''    // true
'' == '0'  //false

6. \ 在字符串中

注意 \ 在字符串中 也是表示轉(zhuǎn)義字符
比如 我想要在字符串中 表示 \ 那么只能使用 \

var a = '\'   //error Invalid token
var a = '\\'  //表示 \
a.length = 1
//如果想表示 "abc\n\r"
//應(yīng)該寫(xiě)成 "abc\\n\\r"

7.對(duì)象的聲明中屠凶,可以直接使用讀寫(xiě)器

注意 不用function聲明 和 不能和對(duì)象原本的已經(jīng)存在key重復(fù)

var obj = {
  value: "default",
  get props() {
    return this.value
  },
  set props(value) {
    this.value = value;
  }
}
obj.props //"default"
obj.props = "aaa";
obj.props //"aaa"

8. 對(duì)象所屬和對(duì)象成型的異步分開(kāi)

借助于javascript的靈活性驰后,可以任意時(shí)候給一個(gè)對(duì)象增加屬性,于是就有了對(duì)象所屬和對(duì)象成型的異步分開(kāi)技巧阅畴。
這是什么意思呢? 就是 對(duì)象屬于哪個(gè)集合和這個(gè)對(duì)象會(huì)變成什么樣實(shí)際可以分開(kāi)的迅耘,而不必必須是生成一個(gè)完整的對(duì)象贱枣,然后再加入到一個(gè)具體的集合中。
上面的思考實(shí)際在很多時(shí)候會(huì)帶來(lái)靈活性颤专,比如它可以減輕我們函數(shù)的傳參邏輯纽哥,比如在用c寫(xiě)代碼時(shí),我們知道栖秕,c語(yǔ)言的對(duì)象屬性是固定的春塌,也就是說(shuō),如果想把一個(gè)對(duì)象加入到一個(gè)數(shù)組中簇捍,那么必須是先完整的生成這個(gè)對(duì)象吼句,然后再加入到數(shù)組中驹愚。但是對(duì)于javascript來(lái)說(shuō)谁鳍,對(duì)象的屬性可以改變窍荧,那么我們可以先把一個(gè)對(duì)象加入數(shù)組中郊楣,然后再去修改對(duì)象的對(duì)象输硝。

利用訂單模型舉例,我們想要把所有訂單都加入到訂單列表中哥童,那么有兩種思考模式
一種為 先生成完整訂單优训,然后再把訂單加入列表中

var order = {};
handlerOrder(order);
orderList.push(order);

一種為 先把訂單數(shù)據(jù)加入訂單列表中妆兑,然后在處理訂單數(shù)據(jù)

var order = {};
orderList.push(order);
handlerOrder(order);

相對(duì)而言,第二種的處理邏輯會(huì)更加簡(jiǎn)單一點(diǎn),因?yàn)楹竺鎯H僅需要思考如何處理訂單的數(shù)據(jù)就行,而不用考慮這個(gè)訂單的其他外在的連續(xù),相對(duì)而言玉罐,更加靈活

特別是在一些異步操作的時(shí)候饶号,我們可以先把訂單對(duì)象加入列表中算谈,然后在寫(xiě)一個(gè)封裝的函數(shù)幔欧,著重處理訂單的數(shù)據(jù)邏輯雁社。

9 url query正則中獲取某個(gè)key

    function getParam(key) {
        var res = new RegExp('[?&]'+ key +'=([^&#]*)').exec(location.search);
        return res && res.length === 2 ? res[1] : '';
    };
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖赘被,帶你破解...
    沈念sama閱讀 222,378評(píng)論 6 516
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異野舶,居然都是意外死亡供炼,警方通過(guò)查閱死者的電腦和手機(jī)诽嘉,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,970評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門(mén)雏门,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人靴患,你說(shuō)我怎么就攤上這事囱挑。” “怎么了檐嚣?”我有些...
    開(kāi)封第一講書(shū)人閱讀 168,983評(píng)論 0 362
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)煞茫。 經(jīng)常有香客問(wèn)我,道長(zhǎng)客情,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 59,938評(píng)論 1 299
  • 正文 為了忘掉前任,我火速辦了婚禮哑梳,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘疾渴。我一直安慰自己芜果,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,955評(píng)論 6 398
  • 文/花漫 我一把揭開(kāi)白布垫桂。 她就那樣靜靜地躺著师幕,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上霹粥,一...
    開(kāi)封第一講書(shū)人閱讀 52,549評(píng)論 1 312
  • 那天灭将,我揣著相機(jī)與錄音,去河邊找鬼后控。 笑死庙曙,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的浩淘。 我是一名探鬼主播捌朴,決...
    沈念sama閱讀 41,063評(píng)論 3 422
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼张抄!你這毒婦竟也來(lái)了砂蔽?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 39,991評(píng)論 0 277
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤署惯,失蹤者是張志新(化名)和其女友劉穎左驾,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體极谊,經(jīng)...
    沈念sama閱讀 46,522評(píng)論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡诡右,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,604評(píng)論 3 342
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了轻猖。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片帆吻。...
    茶點(diǎn)故事閱讀 40,742評(píng)論 1 353
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖咙边,靈堂內(nèi)的尸體忽然破棺而出猜煮,到底是詐尸還是另有隱情,我是刑警寧澤样眠,帶...
    沈念sama閱讀 36,413評(píng)論 5 351
  • 正文 年R本政府宣布友瘤,位于F島的核電站翠肘,受9級(jí)特大地震影響檐束,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜束倍,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,094評(píng)論 3 335
  • 文/蒙蒙 一被丧、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧绪妹,春花似錦甥桂、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 32,572評(píng)論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至,卻和暖如春办陷,著一層夾襖步出監(jiān)牢的瞬間貌夕,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,671評(píng)論 1 274
  • 我被黑心中介騙來(lái)泰國(guó)打工民镜, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留啡专,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 49,159評(píng)論 3 378
  • 正文 我出身青樓制圈,卻偏偏與公主長(zhǎng)得像们童,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子鲸鹦,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,747評(píng)論 2 361

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

  • 轉(zhuǎn)載來(lái)源:編程學(xué)習(xí)網(wǎng) 1. 將徹底屏蔽鼠標(biāo)右鍵oncontextmenu=”window.event.return...
    努力的河馬君閱讀 408評(píng)論 0 3
  • 1.比較兩個(gè)對(duì)象是否相等 2.bind慧库、call、apply bind:Function.prototype.bi...
    一只環(huán)環(huán)環(huán)閱讀 250評(píng)論 0 1
  • 1.!!來(lái)轉(zhuǎn)換成boolean 有時(shí)候我們需要對(duì)一個(gè)變量查檢其是否存在或者檢查值是否有一個(gè)有效值馋嗜,如果存在就返回t...
    day_day_up閱讀 186評(píng)論 0 2
  • Spring Cloud為開(kāi)發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見(jiàn)模式的工具(例如配置管理完沪,服務(wù)發(fā)現(xiàn),斷路器嵌戈,智...
    卡卡羅2017閱讀 134,714評(píng)論 18 139
  • 有時(shí)覺(jué)得覆积,在線上順流里 你是宇宙 在線下逆流里,你是身體熟呛,不是宇宙 我第一次用這種方式闡述 請(qǐng)注意:不是 這樣的 ...
    宇宙之子是我閱讀 681評(píng)論 0 0