JavaScript中的「黑話」

2021-01-07 懸筆e絕

因為球是圓的,所以不論發生什麼都有可能,對這點我是深信不疑的,但最近我總是在懷疑,JavaScript也是圓的!

什麼是「黑話」

黑話,本指舊時江湖幫會人物的暗語、暗號,往往見於小說,後指流行於某一特殊行業中,非局外人所能了解的語言。而本文涉及到的「黑話」,其實是一些利用語言的特徵使用的一些不常見的奇淫技巧,JavaScript的語法是十分簡單靈活的,在項目中建議大家遵從ESLint規範編寫可維護性的代碼,各路神仙們也應該進行自我約束,畢竟「黑話」也並不全是什麼好的東西,如果很多話可以直接講,何必拐彎抹角的去說呢?

「算術」

算術中的位運算已被作者列為禁術,因此希望你在工程中使用位運算時,請確保你有充足的理由使用,並在需要時寫好Hack注釋。

!與!!

!為邏輯非操作符,可以應用於ECMAScript中的任何值,無論這個值是什麼類型,它會被強制轉化為一個布爾值變量,再對其值取反。

!!只是單純的將操作數執行兩次邏輯非,它能將任意類型的值轉化為相應的布爾值,它包含的步驟為:

將一個值轉化為布爾值;將其取反;再次取反。假設你需要通過一個布爾型變量表示是否有id值,以下寫法推薦你使用最後一種方式來進行轉化:

const enable1 =!!id;const enable2 = id ?true:false;const enable3 =Boolean(id);~ 與 ~~

~表示按位取反,~5的運行步驟為:

轉為一個字節的二進位表示:00000101,按位取反:11111010取其反碼:10000101取其補碼:10000110轉化為十進位:-6至於原碼、反碼、補碼原理請看原理篇。

~~它代表雙非按位取反運算符,如果你想使用比Math.floor()更快的方法,那就是它了。需要注意,對於正數,它向下取整;對於負數,向上取整;非數字取值為0,它具體的表現形式為:

~~null;// => 0~~undefined;// => 0~~Infinity;// => 0--NaN;// => 0~~0;// => 0~~{};// => 0~~[];// => 0~~(1/0);// => 0~~false;// => 0~~true;// => 1~~1.9;// => 1~~-1.9;// => -1+

在變量值前使用+的本意是將變量轉換為數字,在一個函數接受數字類型的參數時特別有用:

+'1'// 1+'-1'// '-1+[]// 0+{}// NaN根據觀察,+a與a * 1結果類似。除此之外,使用+也可以作為立即執行函數:+function() {}(),等效於(function(){})()。

字符串與數字相加時會將數值默認轉為字符串,因此有了一下將數字轉為字符串的快捷方法:'' + 1。

& 與 &&

如何你是從類C語言過來的話,請拋棄之前的刻板印象:&可以充當邏輯操作符號。在JavaScript中,&只能進行位運算。

&,它表示按位與,此運算符需要兩個數字並返回一個數字。如果它們不是數字,則會轉換為數字。如果執行7 & 3, 則會經過以下步驟:

先轉換為2進位:111 & 11比較結果為:011將二進位轉回十進位,因此:7 & 3 = 3它也可用於基偶數判斷:const isOdd = num => !!(num & 1);

&&,表示邏輯與,通常用於if條件判斷,可跟你想像的不太一樣,&&並不是單純的返回true或者false,而是依據:

若第一個表達式為false,則返回第一個表達式;若第一個表達式為true,返回第二個表達式。在這裡舉幾個例子:

0&&false0(both are false-y, but 0is the first)true&&falsefalse(second one isfalse-y)true&&truetrue(both are true-y)true&&2020(both are true-y)&&可以連接多個操作符,如:a && b && c && d,返回值的規則與上面一樣。除此以外,它還經常被作為短路邏輯使用:若前面表達式不是truthy,則不會繼續執行之後的表達式。如在取一個對象的屬性,我們需要先判斷是否為空才能進行取值,否則會拋出Uncaught TypeError,這種情況下一般我們也會通過邏輯或,給與表達式一個默認值:

const value = obj && obj.value ||false當JavaScript壓縮工具遇到if判斷時,也會使用&&短路邏輯從而節省內存空間:

// beforeif(test){ alert('hello')}// aftertest && alert('hello')| 與 ||

它們與&和&&使用方法很相似,不同的是它們表示的是邏輯或,因此使用|會進行按位或運算,而||會返回第一個Truthy值。

使用||進行默認值賦值在JavaScript中十分常見,這樣可以省略很多不必要的if語句,比如:

// beforelet res;if(a){ res = a;}elseif(b){ res = b;}elseif(c){ res = c;}else{ res =1;}// afterconst res = a || b || c ||1;== 與 ===

==為相等運算符,操作符會先將左右兩邊的操作數強制轉型,轉換為相同的操作數,再進行相等性比較。

===為全等運算符,它除了在比較時不會將操作數強制轉型,其餘相等判斷與==一致。

簡單而言, ==用於判斷值是否相等, ===判斷值與類型是否都相等,因此使用全等運算符判斷操作數會更準確,新手也在學習JavaScript接收到的前幾條Tips就是避免使用相等運算符,真的是這樣嗎?沒錯,這樣能確保在你不徹底熟悉語言的情況下,儘可能的去避免犯錯,但是我們也應該清楚在哪些情況下應該使用相等運算符,規則往往只針對於新手,而對聰明的你來說,最重要的是要清楚自己在做什麼。

相等操作符對於不同類型的值,進行的比較如下圖所示:

針對於undefined與null:undefined與null互等,與其餘任意對象都不相等,因此在某些lib裡,你可能會看到如下寫法:

if(VAR ==undefined){}if(VAR ==null){}它等效於:

if(VAR ===undefined|| VAR ===null){}對於 '', false, 0而言,他們都屬於Falsy類型,通過Boolean對象都會轉換為假值,而通過==判斷三者的關係,他們總是相等的,因為在比較值時它們會因為類型不同而都被轉換為false值:

console.log((false==0)&&(0=='')&&(''==false))// true或者有時候我們希望利用強轉特性比較字符串與數字:

console.log(11=='11')// trueconsole.log(11==='11')// false^

按位異或運算符,對比每一個比特位,當比特位不相同時則返回1,否則返回0。很少人在Web開發中使用此運算符吧,除了傳說中的一種場景:交換值。

若要交換a與b的值,如果可以的話推薦你使用:

[a, b]=[b, a];或者新建一個c,用於存儲臨時變量,如果你遇到有人這樣書寫:

// 異或運算,相同位取0,不同位取1,a ^ b ^ b = a, a ^ a ^ b = ba = a ^ bb = a ^ ba = a ^ b這樣通過異或運算進行交換兩個數字型變量,請原諒他並忽視它,他只可能是一個醉心於魔法的初心者,並祝願他早日發現,簡潔易讀的函數才是最佳實踐。

數值表示法

3e9

科學計數法是一種數學術語,將一個數表示為a乘以10的n次方,如光速30萬公裡每秒,在計算中通常將米做單位,則記為:300000000m/s,而在JavaScript中我們可使用科學計數法 3e9表示。

在這裡舉幾個科學計數法的示例:

1e5;// 1000002e-4;// 0.0002-3e3;// -3000Number對象有toExponential(fractionDigits)方法以科學計數法返回該數值的字符串表示形式,參數fractionDigits可選,用於用來指定小數點後有幾位數字,例如:(179000).toExponential(); // "1.79e+5"。

以下情況JavaScript會自動將數值轉為科學計數法表示:

小數點前的數字多於21位。小數點後的零多於5個。.5px

通常某些人習慣省略0.開頭的數字,常見於數值計算、css屬性中,比如0.5px可直接寫為.5px,0.2 * 0.3可寫為:.2 * .3

0x、0o和0b

在十進位的世界裡呆久了,請不要忘記還有其他進位的存在,在計算機中它們是同地位的。JavaScript提供了以下進位的表示方法:

二進位:只用0和1兩個數字,前綴為0b,十進位13可表示為0b1101八進位:只用0到7八個數字,前綴為0o、0,十進位13可表示為0o15、015十六進位:只用0到9的十個數字,和a到f六個字母,前綴為0x,十進位13可表示為0xd默認情況下,JavaScript 內部會自動將八進位、十六進位、二進位轉為十進位再進行運算。從十進位轉其他進位請查閱toString方法,從其他進位轉十進位請查閱parseInt方法,從其他進位轉其他進位請先轉為十進位再轉為其他方法。

「話術」

Array.prototype.sort

Array.prototype.sort()默認根據字符串的Unicode編碼進行排序,具體算法取決於實現的瀏覽器,在v8引擎中,若數組長度小於10則使用從插入排序,大於10使用的是快排。

而sort支持傳入一個compareFunction(a, b)的參數,其中a、b為數組中進行比較的兩個非空對象(所有空對象將會排在數組的最後),具體比較規則為:

返回值小於0,a排在b的左邊返回值等於0,a和b的位置不變返回值大於0,a排在b的右邊因此利用sort即可寫一個打亂數組的方法:

[1,2,3,4].sort(()=>.5-Math.random())但是以上的實現並不是完全隨機的,究其原因,還是因為排序算法的不穩定性,導致一些元素沒有機會進行比較,具體請參考問題,在抽獎程序中若要實現完全隨機,請使用 Fisher–Yates shuffle 算法,以下是簡單實現:

function shuffle(arrs){for(let i = arrs.length -1; i >0; i -=1){const random =Math.floor(Math.random()*(i +1));[arrs[random], arrs[i]]=[arrs[i], arrs[random]];}}Array.prototype.concat.apply

apply接收數組類型的參數來調用函數,而concat接收字符串或數組的多個參數,因此可使用此技巧將二維數組直接展平:

Array.prototype.concat.apply([],[1,[2,3],[4]])而通過此方法也可以寫一個深層次遍歷的方法:

function flattenDeep(arrs){let result =Array.prototype.concat.apply([], arrs);while(result.some(item => item instanceofArray)){ result =Array.prototype.concat.apply([], result);}return result;}經過測試,效率與lodash對比如下:

對上述方法中的Array.prototype.concat.apply([], target)亦可以寫成:[].concat(...target)。

Array.prototype.push.apply

在es5中,若想要對數組進行拼接操作,我們習慣於使用數組中的concat方法:

let arrs =[1,2,3];arrs = arrs.concat([4,5,6]);但還有酷的方法,利用apply方法的數組傳參特性,可以更簡潔的執行拼接操作:

const arrs =[1,2,3];arrs.push.apply(arrs,[4,5,6]);Array.prototype.length

它通常用於返回數組的長度,但是也是一個包含有複雜行為的屬性,首先需要說明的是,它並不是用於統計數組中元素的數量,而是代表數組中最高索引的值:

const arrs =[];arrs[5]=1;console.log(arrs.length);// 6另外,length長度隨著數組的變化而變化,但是這種變化僅限於:子元素最高索引值的變化,假如使用delete方法刪除最高元素,length是不會變化的,因為最高索引值也沒變:

const arrs =[1,2,3];delete arrs[2];// 長度依然為3length還有一個重要的特性,那就是允許你修改它的值,若修改值小於數組本身的最大索引,則會對數組進行部分截取:

const arrs =[1,2,3,4];arrs.length =2;// arrs = [1, 2]arrs.length =0;// arrs = []若賦予的值大於當前最大索引,則會得到一個稀疏數組:

const arrs =[1,2];arrs.length =5;// arrs = [1, 2,,,,]若將值賦為0,則執行了清空數組的操作:

const arrs =[1,2,3,4];arrs.length =0;// arrs = []使用此方法會將數組中的所有索引都刪除掉,因此也會影響其他引用此數組的值,這點跟使用arrs = []有很大的區別:

let a =[1,2,3];let b =[1,2,3];let a1 = a;let b1 = b;a =[];b.length =0;console.log(a, b, a1, b1);// [], [], [1, 2, 3], []在對length進行修改的時候,還需要注意:

值需要為正整數傳遞字符串會被嘗試轉為數字類型Object.prototype.toString.call

每個對象都有一個toString(),用於將對象以字符串方式引用時自動調用,如果此方法未被覆蓋,toString則會返回[object type],因此Object.prototype.toString.call只是為了調用原生對象上未被覆蓋的方法,call將作用域指向需要判斷的對象,這樣一來就可以通過原生的toString方法列印對象的類型字符串:Object.prototype.toString.call([]) => "[object Array]" ,利用這個特性,可以較為精確的實現類型判斷。

在ES3中,獲取到的type為內部屬性[[Class]]屬性,它可以用來判斷一個原生屬性屬於哪一種內置的值;在ES5中新增了兩條規則:若this值為null、undefined分別返回:[object Null]、[object Undefined];在ES6中不存在[[Class]]了,取而代之的是一種內部屬性:[[NativeBrand]],它是一種標記值,用於區分原生對象的屬性,具體的判斷規則為:

19.1.3.6Object.prototype.toString ()When the toString method is called, the following steps are taken:If the this value isundefined,return"[object Undefined]".If the this value isnull,return"[object Null]".Let O be !ToObject(this value).Let isArray be ?IsArray(O).If isArray istrue,let builtinTag be "Array".Elseif O is a String exotic object,let builtinTag be "String".Elseif O has a [[ParameterMap]]internal slot,let builtinTag be "Arguments".Elseif O has a [[Call]]internal method,let builtinTag be "Function".Elseif O has an [[ErrorData]]internal slot,let builtinTag be "Error".Elseif O has a [[BooleanData]]internal slot,let builtinTag be "Boolean".Elseif O has a [[NumberData]]internal slot,let builtinTag be "Number".Elseif O has a [[DateValue]]internal slot,let builtinTag be "Date".Elseif O has a [[RegExpMatcher]]internal slot,let builtinTag be "RegExp".Else,let builtinTag be "Object".Let tag be ?Get(O,@@toStringTag).IfType(tag)isnotString,set tag to builtinTag.Return the string-concatenation of "[object ", tag,and"]".Thisfunctionis the %ObjProto_toString% intrinsic object.NOTEHistorically,thisfunction was occasionally used to access the String value of the [[Class]]internal slot that was used in previous editions of this specification as a nominal type tag for various built-in objects.The above definition of toString preserves compatibility for legacy code that uses toString as a test for those specific kinds of built-in objects.It does not provide a reliable type testing mechanism for other kinds of built-inor program defined objects.In addition, programs can use@@toStringTagin ways that will invalidate the reliability of such legacy type tests.Object.create(null)

用於創建無「副作用」的對象,也就是說,它創建的是一個空對象,不包含原型鏈與其他屬性。若使用const map = {}創建出來的對象相當於Object.create(Object.prototype),它繼承了對象的原型鏈。

JSON.parse(JSON.stringify(Obj))

很常用的一種深拷貝對象的方式,將對象進行JSON字符串格式化再進行解析,即可獲得一個新的對象,要注意它的性能不是特別好,而且無法處理閉環的引用,比如:

const obj ={a:1};obj.b = obj;JSON.parse(JSON.stringify(obj))// Uncaught TypeError: Converting circular structure to JSON這樣通過JSON解析的方式其實性能並不高,若對象可通過淺拷貝複製請一定使用淺拷貝的方式,不管你使用{...obj}還是Object.assign({}, obj)的方式,而如果對性能有要求的情況下,請不要再造輪子了,直接使用npm:clone這個包或是別的吧。

「理論」

Truthy與Falsy

對每一個類型的值來講,它每一個對象都有一個布爾型的值,Falsy表示在Boolean對象中表現為false的值,在條件判斷與循環中,JavaScript會將任意類型強制轉化為Boolean對象。以下這些對象在遇到if語句時都表現為Falsy:

if(false)if(null)if(undefined)if(0)if(NaN)if('')if("")if(document.all)document.all屬於歷史遺留原因,所以為false,它違背了JavaScript的規範,可以不管它,而NaN這個變量,千萬不要用全等或相等對其進行判斷,因為它發起瘋來連自己都打:

console.log(NaN===0)// falseconsole.log(NaN===NaN)// falseconsole.log(NaN==NaN)// false但是我們可以使用Object.is方法進行判斷值是否為NaN,它是ES6新加入的語法,用於比較兩個值是否相同,它可以視為比全等判斷符更為嚴格的判斷方法,但是不可混為一談:

Object.is(NaN,NaN)// trueObject.is(+0,-0)// false而除了Falsy值,所有值都是Truthy值,在Boolean上下文中表現為true。

原碼, 反碼, 補碼

在JavaScript進行位運算時,採用32位有符號整型,即數字5有以下表示方式:

原碼:00000000 00000000 00000000 00000101反碼:00000000 00000000 00000000 00000101補碼:00000000 00000000 00000000 00000101而數字-5的表示方式為:

原碼:10000000 00000000 00000000 00000101反碼:11111111 11111111 11111111 11111010補碼:11111111 11111111 11111111 11111011綜上所述,有以下規律:

正數的原碼、反碼、補碼都是它本身負數的反碼:在其原碼的基礎上, 符號位不變,其餘各個位取反負數的補碼:負數的反碼 + 1那麼它們到底有什麼用呢?其實位運算就是用計算機底層電路所有運算的基礎,為了讓計算機的運算更加簡單,而不用去辨別符號位,所有值都採用加法運算,因此,人們設計了原碼,通過符號位來標識數字的正負:

1=00000001-1=10000001假如計算機要對兩個數相加:1 + (-1),使用原碼相加的運算結果為:10000010,很明顯-2並不是我們想要的結果,因此出現了反碼,若使用反碼進行運算會有什麼結果呢,讓我們來看一下:

1[反碼]+(-1)[反碼]=00000001+11111110=11111111[反碼]=10000000[原碼]此時運算結果是正確的,可是這樣還存在一個問題,有兩個值可以表示0:1000 0000、0000 0000,對於計算機來說,0帶符號是沒有任何意義的,人們為了優化0的存在,設計出了補碼:

1[補碼]+(-1)[補碼]=00000001+11111111=00000000[原碼]這樣一來,-0的問題就可以解決了。

參考資料

https://modernweb.com/45-useful-javascript-tips-tricks-and-best-practices/https://dmitripavlutin.com/the-magic-behind-array-length-property/https://medium.freecodecamp.org/9-neat-javascript-tricks-e2742f2735c3https://stackoverflow.com/questions/7310109/whats-the-difference-between-and-in-javascripthttp://javascript.ruanyifeng.com/grammar/number.html

關於本文作者:@vv13原文:https://segmentfault.com/a/1190000016595592

相關焦點

  • 黑話在何種語境下使用呢 黑話是什麼意思?網絡黑話有哪些
    ­  除此之外,「nss、xswl、pyq、cx、zqsg、走花路、糊了、基操勿6、連睡、擴列、nbcs……」這些被發明出來的固定用法,在一部分00後中已經成為非常常用的語言,網稱「黑話」。­  「這些黑話可以成為一種辨別標準,有利於進行有差別的社交。不然我怎麼一下子就判斷出值不值得和你交朋友?」
  • 每日一課 | JavaScript中的數組
    JavaScript中的數組具有length屬性,該屬性返回該數組的大小。我們僅初始化數組,並且未在數組中添加任何元素。如何檢索數組中的第一個和最後一個元素? 在javascript中,數組不是其他語言(例如c#,java)的定長數組類型,即使它們聲明為定長,它也會動態增長。
  • 天王蓋地虎,寶塔鎮河妖:《智取威虎山》中的黑話是什麼意思?
    在「樣板戲」京劇《智取威虎山》中有許多片段精彩絕倫,其中楊子榮打虎上山與土匪使用黑話對話的片段尤其扣人心弦,可以說看過一次,牢記終生。無論是看舞臺京劇《智取威虎山》還是電影《智取威虎山》,觀眾在敬佩楊子榮英雄虎膽的同時,也對那些黑話感到困惑,什麼「天王蓋地虎」、「一座玲瓏塔,面向青寨背靠沙」,究竟是什麼意思呢?黑話中又有什麼門道呢?
  • 英語中的黑話:倫敦東區的Rhyming Slang
    英語日常詞彙中,很多常用的成語都讓人費解。例如,把have a look說成have a butcher's。Have a butcher’s這種說法,起源於舊時倫敦東區居民的黑話。倫敦東區的黑話,不但生動、有特色,而且很有系統,為英語貢獻了很多短語,今天字典裡仍然能查到。這裡說的「黑話」,相當於英語中的cant或argot,意思接近中文的「切口」;並不僅限於黑社會和犯罪分子才使用,指的只是秘密隱語,目的是讓圈子以外的人無法聽懂。中國各地也有很多類似的隱語。
  • 七天學會javascript第一天javascript介紹
    javascript介紹javascript數據類型javascript運算符javascript對象javascriptDate對象javascript String對象JavaScript常用於實現一些前端效果。
  • JavaScript為什麼這麼難?
    只有真正的javascript程式設計師才知道javascript太難了。其他程式設計師都覺得javascript是門玩具語言。javascript中的this不是靜態綁定的,而是動態綁定的。而且可以人為改變指向。看看下面這個例子
  • 成年人的社交黑話,套路簡直太深了!
    在日常生活中,有些人常常嘴上說一套,心裡想一套,這就是傳說中的《成年人社交黑話》。 不論是在朋友之間的閒聊,還是情侶之間的甜言蜜語,或者是遇到騙子時的詐騙臺詞和劇本,生活本不缺套路,只是缺少發現套路的眼睛。
  • 網頁技巧:妥善處理JavaScript中的錯誤
    在這些實例中,JavaScript語言使得發現錯誤變得簡單,從而能夠繼續下去。發現錯誤和Java、C#等其他語言相類似,JavaScript中包括了try/catch/finally語句。一個try語句包含了一組代碼,在這組代碼中,像運行時間錯誤這樣的異常可能會發生。
  • 【黑話合集】攻略黑話太多看不懂?一篇文章搞定遊戲裡全部黑話!
    公主連結R國服開服也有大半個月了,相信大家也查看了許多關於遊戲的攻略,但是部分新玩家在查看攻略的時候常常遇到一些黑話,從而導致對攻略的部分內容理解偏差。本篇文章就將引導各位看懂黑話!本篇將分2個篇目若干小條進行解釋說明,並會給出此黑話的來由,且本文只採用最被大眾熟知或者最具有代表性的黑話。
  • Javascript去除字符串中的點或其他符號
    今天在寫一個前端頁面的時候遇到了一個ip參數問題,我想把ip值中的點替換成 - 的形式。在前端上使用javascript進行操作的。測試了兩次沒有好用,程序直接把整個字符串都進行了替換,在考慮這個是為什麼呢?
  • JavaScript是什麼
    面向對象的思想—java、 C#腳本—寫好的程序不需要中間轉換,就能立即在運行環境中運行。javaScript,SQL為html網頁提供動態效果【特效】。完成與後臺處理程序數據交互。【1.發請求{要} 2.處理數據】簡單的具體操作:1.直接向html文件中寫出標記和內容。
  • javascript定時器
    在javascript中,定時器一共有兩個:setTimeout與setInterval例1:使用javascript彈出一個helloworld例2:過3秒後彈出一個helloworld3秒後彈出helloworld,只執行一次,默認情況下setTimeout
  • Javascript 生成器
    在 javascript 中,如果想要使用生成器,則需要: 定義特殊的生成器函數 調用該函數創建一個生成器對象 在循環中使用該生成器對象,或直接調用其 方法 我們以下面這個簡單的程序做為起點,並執行以下每個步驟:
  • 各行都有「黑話」,汽車行業的「黑話」科普你能錯過?
    而隨之到來的「體溫表」這個詞更是一夜爆紅,據說這是記者圈內的一句黑話,指有些體溫表忘記了自己測量溫度的職能,在顯示測量結果前加入花裡胡哨的鋪陳,並且把自己當成了主角。說到黑話,其實在各行各業,總會有一些外行人不了解的「黑話」。那在汽車行業裡的「黑話」,你又知道多少呢?
  • 天王蓋地虎 寶塔鎮河妖:東北土匪黑話中的玄機和奧秘
    筆者王錦思注意到,槍法、武術和黑話是當鬍子的必修課程,要想在鬍子堆裡出人頭地,這三門技藝至少要精通一門,否則,只能永遠在綹子中當「崽子」,也就是香港等地俗稱的馬仔,東北話又叫「小波樂子」。東北話幽默風趣,帶有黑土地的鄉野氣息,鬍子的黑話更是如此,在相互尊敬的同時,也試探對方是外敵還是朋友,人們最熟知的土匪黑話來自《林海雪原》。
  • 地產人網際網路黑話指南
    『導語:地產人,學講網際網路黑話,樹立網際網路思維。』網際網路席捲一切。前幾天,《如果郭德綱是一個網際網路人》刷爆朋友圈,漫畫也成了自帶聲效的表達。開發商把公司打扮成一個網際網路公司,就會換來更高估值。地產人把自己打扮成一個網際網路人,也許會換來更高薪水。
  • 《公主連結》國服黑話有哪些 遊戲常見黑話匯總一覽
    很多萌新玩家對於遊戲中的一些常見黑話還不太了解,想知道這些黑話具體是什麼意思,小編今天為大家帶來了公主連結國服遊戲常見黑話一覽,感興趣的玩家快來和小編一起... 公主連結國服母豬石是什麼意思?挖礦是什麼意思?
  • javascript流程語句
    ">/*單分支【格式】if(判斷條件)執行語句;【過程】先去判斷括號中的判斷條件,如果成立,回去執行緊跟著if語句的一條語句。== 0)alert("這是一個偶數");alert("執行語句");</script>【注】在JS中,我們把{ }括起來的所有語句都當做是一條語句對待。
  • 大學生「黑話指南」請注意查收
    當代成年人社交生活中充滿潛臺詞 我們把這種具有「弦外之音」的話 統稱為「黑話」 每個圈子都有一些「圈內人」才聽懂的話 當這些話出現的時候 萌新大多都會一頭霧水 下面就來盤點一下吧!
  • JavaScript中的陷阱大集合
    typeoftypeof這會返回一個javascript基本類型的實例的類型。evaleval 可以將字符串以javascript代碼的形式來解析執行,但是一般來說我們不建議這麼做。因為eval非常慢 - 當javascript被加載到瀏覽器中時,它會被編譯成本地代碼;然而執行的過程中每次遇到eval表達式,編譯引擎都將重新啟動執行編譯,這樣做的代 價太大了。