国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

JavaScript 程序員可以從C++中學到什么

不知名網友 / 2205人閱讀

摘要:特別是所謂的不需要的引用可能會導致內存泄漏,這意味著程序占用的內存比實際需要的多,從而降低了內存的效率。但是如果我們能夠意識到內存泄漏的風險,就可以采取措施將其刪除。意外的使用全局變量是導致內存泄漏的一個常見原因。

作者:Bret Cameron
翻譯:瘋狂的技術宅
原文:https://medium.com/@bretcamer...

本文首發微信公眾號:前端先鋒
歡迎關注,每天都給你推送新鮮的前端技術文章

如何通過了解類型、內存以及低級語言使你成為更好的程序員

時間的結束?圖片來自 Jens Kreuter,由Bret Cameron修改。

像許多開發新手一樣,JavaScript 是我學的第一門語言。它是一種 Web 前端編程語言 —— 感謝Node.js —— 它同時也是一種流行的后端工具。

我也相信,作為一種“更高級”的語言,JavaScript 是初學者的絕佳選擇。你可以在任何 Web 瀏覽器上運行它,并且由于具有原型繼承和動態類型等功能,學習者在編寫和執行第一段代碼之前克服的障礙更少。

但是 JavaScript 讓初學者更容易上手的因素也讓它難以被掌握。它能以看上去不直觀的方式運行,并且當涉及到更多不透明的功能時,許多程序員更依賴于試錯法,例如隱式類型強制轉換或 this 關鍵字。 知道這些功能比理解它們要容易得多。

“Any fool can know. The point is to understand.”?——?Albert Einstein

因此要成為更高級的 JavaScript 開發人員,試著更深入地了解幕后發生的事情是有很大幫助的。歸根結底,最精彩的地方是 V8 JavaScript 引擎:它是使用最廣泛的 JavaScript 編譯器(Google Chrome、Node.js等的基礎之一),它是開源的,因此你可以準確地看到 JavaScript 是怎樣在 C ++ 中執行的。

但是本文不是 V8 的指南。相反,它是有關像 C++ 這樣的低級語言如何幫助我們提高對 JavaScript 等高級語言的理解的一篇文章。 C++ 不僅可以幫助我們理解底層的編譯器代碼,而且通過研究 C++ 程序員必須要做而 JavaScript 程序員不必做的事,可以更好地了解在 JavaScript 中提升效率的地方,以及為什么有時會引發問題。

特別是我們將會研究 C++ 中的數據類型和內存管理,以及這些知識如何幫助我們避免類型錯誤,并防止 JavaScript 中的內存泄漏。還會研究內存管理與時間溢出之間的關系。

JavaScript 中強制類型

在進入 C++ 之前,先讓我們看看 JavaScript 是如何處理數據類型以及“類型強制”系統的一些陷阱的。

JavaScript 使用類型強制轉化自動將一種數據類型轉換為另外一種:字符串轉為數字、數字轉為字符串、數字或字符串轉為布爾值等等。換句話說,如果你沒有明確指定所需的類型,JavaScript 將根據一組規則進行猜測。有時這很管用,它可以幫助我們快速簡潔地編寫代碼。但有時候可能是引發混亂的原因。

實際上即使這種行為從根本上來講是可預測的,但某些自動推測也不那么直觀,并且在很多大型項目的代碼庫中,很容易看到類型強制轉換導致了意外錯誤的發生。例如以下是使用組合字符串和數字的進行運算的一些演示:

"10" - 4
// 6

"10" + 4
// "104"

"20" - "5"
// 15

"20" + "5"
// 205

"20" + + "5"
// 205

"foo" + "bar"
// "foobar"

"foo" + + "bar"
// "fooNaN"

"6" - 3 + 3
// 6

"6" + 3 - 3
// 60

在這些例子中, + 運算符造成了大量的混亂,它可以強制把字符串轉為數字,也可以作為連接運算符組合兩個或多個字符串。

最后一個例子可能是最令人困惑的。在 "6" + 3?—?3 中,如果首先處理 3?—?3 ,然后再進行字符串連接,"6" + 0 會返回一個字符串,但是在這里返回的結果居然是一個數字!

雖然類型強制轉換可以幫助開發人員更快速、簡潔地編寫代碼,但是它使初學者思考得更少,從而也就不清楚為什么這樣的轉換系統可能會導致錯誤,特別是在更大、更復雜的代碼庫中。上面的結果對于經驗豐富的 JavaScript 程序來說可能是完全合理的,但它們并不直觀!

考慮到 JavaScript 類型強制系統的優點和缺點,現在讓我們看看 C++ 是如何處理數據類型的。

C++ 中的類型和內存管理

C++ 之類的低級語言沒有這種潛在缺陷,因為必須在定義時聲明數據類型。雖然 JavaScript 也有三個關鍵字 ?varletconst? 用于聲明新變量,但在C ++中每個數據類型都有自己的關鍵字。

例如 C++ 中的 7 種基本數據類型是整型、浮點型、雙精度浮點型,字符型,寬字符型,布爾型和無類型。用于定義它們的關鍵字分別是 intfloatdoubleboolcharwchar_tvoid

下面的代碼段包含了每種類型的示例聲明,并添加了注釋:

#include 
#include 
using namespace std;

int main()
{
 
  // BOOLEANS
  bool isChecked = true;
  
  // INTEGERS
  int age = 24;

  // FLOATS
  // In general, a float has 7 decimal digits of precision, while a double has 15
  float pi7 = 3.1415926;
  double pi15 = 3.141592653589793;
  
  // CHARACTERS
  // Regular characters can contain only values stored in the ISO Latin tables
  // Wide characters, however, can contain unicode values
  char englishGreeting[6] = {"H", "e", "l", "l", "o", "