我不知道還能夠用 JS 作的 6 件事

做者:Daniel
譯者:前端小智
來源:js-craft
點贊再看,微信搜索 【大遷世界】關注這個沒有大廠背景,但有着一股向上積極心態人。本文 GitHub https://github.com/qq44924588... 上已經收錄,文章的已分類,也整理了不少個人文檔,和教程資料。

JS 是一種靈活的語言,這種特性讓咱們常常以爲它是一門最簡單的語言,也是最難掌握的語言。 我使用 JavaScript 已有不少年了,但我仍然偶然發現一些我不知道的隱藏語法或技巧。javascript

咱們來一直看看,我發現了哪些。前端

1. Function 構造函數

Function()構造函數雖然不是很經常使用,可是瞭解一下仍是頗有必要的。java

不論是經過函數定義語句仍是函數直接量表達式,函數的定義都要使用 function()關鍵字。單函數還能夠經過Function()構造函數來定義,好比:git

const diff = new Function('a', 'b', 'return a - b');
diff(20,13) // 7

這一行的實際效果和下面的一行代碼是等價的:github

const diff = function(a, b) {
   return a - b
}

diff(20, 13)

2. with 語句

JavaScript 有個 with 關鍵字, with 語句的本來用意是爲逐級的對象訪問提供命名空間式的速寫方式。也就是在指定的代碼區域, 直接經過節點名稱調用對象。瀏覽器

咱們已經知道,用變量的做用域和做用域鏈(即一個按順序檢索的對象列表)來進行變量名解析,而 with 語句就是用於暫修改做用域鏈的,其語法爲:微信

with(object)

該語句能夠有效地將object添加到做用域鏈的頭部,而後執行statement,再把做用域鏈恢復到原始狀態。函數

const book = {
    author: '前端小智',
    title: '我不知道還能夠用 JS 作的 6 件事'
}
with(book) {
    console.log(author); // 前端小智
    console.log(title); // 我不知道還能夠用 JS 作的 6 件事
}

使用 with語句的 JavaScript 代碼很難優化,所以它的運算速度比不使用with語句的等價代碼要慢得多。並且,在with語句中的函數定義和變量初始化可能會產生使人驚訝的、相抵觸的行爲,所以咱們避免使用with`語句。工具

3. + 操做符

咱們可使用+運算符將字符串轉換爲數字。 除非你想解析爲特定的數字類型,不然不須要使用諸如 parseInt()parseFloat() 之類的函數。優化

const nr = +'1.5';
nr + 1; // 2.5

4. 給函數賦值屬性

咱們能夠給函數賦屬性。接着,能夠經過爲函數分配特定的屬性來建立可配置的函數。

function sayHello() {
    if (sayHello.country = 'US') {
        return alert('Hi there!');
    }
    if (sayHello.country = 'FR') {
        return alert('Bonjour !');
    }
    if (sayHello.country = 'GR') {
            return alert('Guten Tag !');
        }
    return alert('Hi');
}
sayHello.country =  'FR';
sayHello(); // alert('Bonjour !');

外,咱們可使用這些函數屬性做爲計數器或「靜態變量」。

5. arguments.callee.caller

咱們可使用arguments.callee.caller來查看哪一個函數調用了當前函數arguments JS 普通函數的默認值。 arguments.callee.caller告訴咱們誰調用了該函數。 相似於只有一層 console.trace()

function sayHello() {
  console.log(arguments.callee.caller) // [Function: start]
}

(function start() {
  sayHello()
})()

另外arguments.callee表示引用當前正在運行的函數。

function sayHello() {
  console.log(arguments.callee) // [Function: sayHello]
}

(function start() {
  sayHello()
})()

6. void 操做符

void 運算符 對給定的表達式進行求值,而後返回 undefined

void(1); // undefined
void(true); // undefined
void(false); // undefined
void({}); // undefined

若是你問爲何只須要返回undefined而不是返回就須要一個特殊的關鍵字undefined:緣由是在ES5以前,實際上能夠命名一個全局變量undefined,就像這樣:var undefined = "hello"var undefined = 23,大多數瀏覽器均可以接受它;undefined不會保證標識符其實是不肯定的。所以,要返回實際的未定義值,請使用void運算符。它不是一個很是流行的運算符,而且不多使用。

人才們的 【三連】 就是小智不斷分享的最大動力,若是本篇博客有任何錯誤和建議,歡迎人才們留言,最後,謝謝你們的觀看。


代碼部署後可能存在的BUG無法實時知道,過後爲了解決這些BUG,花了大量的時間進行log 調試,這邊順便給你們推薦一個好用的BUG監控工具 Fundebug

原文:http://www.js-craft.io/blog/6...


交流

文章每週持續更新,能夠微信搜索【大遷世界 】第一時間閱讀,回覆【福利】有多份前端視頻等着你,本文 GitHub https://github.com/qq449245884/xiaozhi 已經收錄,歡迎Star。

相關文章
相關標籤/搜索