js權威指南學習筆記(一)類型、值和變數

来源:https://www.cnblogs.com/tonysmile/archive/2018/08/26/9539127.html
-Advertisement-
Play Games

1、數據類型:原始類型(primitive type) 和對象類型(object type) 原始類型包括數字、字元串和布爾值; 除數字、字元串、布爾值、null(空)、undefined(未定義),其它都屬於對象類型。 也可以分為可變(mutable)類型和不可變(immutable)類型。數字、 ...


1、數據類型:原始類型(primitive type) 和對象類型(object type)

原始類型包括數字、字元串和布爾值; 除數字、字元串、布爾值、null(空)、undefined(未定義),其它都屬於對象類型。 也可以分為可變(mutable)類型和不可變(immutable)類型。數字、字元串、布爾值、null和undefined屬於不可變類型。 2、 非數字值用NaN表示,函數isNaN()用於判斷一個值是否是非數字,如果參數是NaN或非數字值,返回true。 函數isFinite()在參數不是NaN、Infinity(無窮大)、-Infinity(負無窮大)的時候返回true。 3、全局對象 包括全局屬性(全局變數屬於全局屬性)、全局函數、構造函數、全局對象。  全局函數如isNaN()、parseInt()等,構造函數如Date()、RegExp()、String(), 全局對象如Mah、JSON。 新頁面載入時將會創建一個新的全局對象,並定義初始屬性,如上。 4、包裝對象 定義:存取字元串、數字或布爾值的屬性時創建的臨時對象稱為包裝對象。 null、undefined沒有包裝對象,訪問它們的屬性會造成一個類型錯誤。 字元串、數字和布爾值可以通過String()、Nmber()和Boolean()構造函數來顯式的創建包裝對象。 一般情況下,比如我們在訪問字元串的屬性時,都是通過 "." 操作符來訪問,如下:       2 2           1
console.log("hello world".length);
2
console.log("this a string".indexOf("a"));
    其實在調用這些方式或屬性時js內部隱式的為我們創建了一個包裝對象。如下:       2 2           1
console.log(new String("hello world").length);
2
console.log(new String("this a string").indexOf("a"));
    隱式和顯式的區別: 兩者並不相等。如下:       4 4           1
var a1 = "test",
2
   a2=new String("test");
3
console.log(a1 == a2);//true
4
console.log(a1 === a2);//false
    隱式創建的包裝對象,在使用完後之後就會被拋棄了,如:       2 2           1
test.a = "hello"; //隱式創建包裝對象,用完即時銷毀
2
console.log(test.a); //undefined  新創建一個包裝對象,未初始化
    用處: 有的瀏覽器性能不是很好,比如說低版本IE,當頻繁處理字元串、數字時,效率會很低。
所以有時不如直接顯式創建包裝對象,防止瀏覽器過多地創建隱式的包裝對象,提升性能。       4 4           1
//不推薦使用種方法
2
var example = "this is a example";  
3
//推薦使用這種方法,提升性能。
4
var example2 = new String("this is a example");
    5、類型轉換 (1)顯式類型轉換 可以通過Boolean()、Number()、String()或Object()函數。 (2)對象轉換為原始值 所以對象都繼承了toString()和valueOf()兩個轉換方法。 對象到字元串的轉換步驟
  • 如果對象具有toString()方法,則調用這個方法。如果它返回一個原始值,這個值轉換為字元串。
  • 如果對象沒有toString()方法,或者這個方法並不返回一個原始值,那麼javascript會調用valueOf()方法,如果存在這個方法,javascript會調用它,如果它返回一個原始值,這個值轉換為字元串。
  • 否則,javascript無法從toString()或valueOf()獲得一個原始值,因此它將拋出一個類型錯誤異常。
對象到數字的轉換步驟     與對象到字元串轉換做相同的事情,只是它會首先嘗試使用valueOf()方法。 如果將對象和一個原始值比較,則轉換遵循對象到原始值的轉換方式進行。 (3)在做算術運算的時候,如果其中一個操作數是對象,javascript會將對象轉換為原始值,不管得到的原始值是否直接使用,都不會進一步轉換為數字或字元串。 如:       5 5           1
var now = new Date(); 
2
typeof(now + 1); //將日期轉換為字元串 (字元串的拼接)
3
typeof(now - 1); //使用對象到數字的轉換
4
now == now.toString() //true:隱式和顯式的字元串轉換
5
now > (now - 1) //將日期轉換為數字(隱式)
    預設情況下,日期對象在轉換為原始值時,會優先使用toString()方法(隱式)。在對日期對象執行加法運算時,要顯式的將日期對象轉換為數字,才能運算。 6、作用域 (1)變數作用域 全局變數擁有全局作用域。 在函數體內,局部變數的優先順序高於同名的全局變數。 (2)函數作用域 在函數內聲明的所有變數在函數體內始終是可見的。 (3)屬性變數 使用var聲明一個變數時,創建的這個屬性是不可配置的。無法通過delete運算符刪除。 沒有使用嚴格模式給一個未聲明的變數賦值,javascript會自動創建一個全局變數,這種方式創建的變數是可配置屬性,可以刪除它們:       6           1
var trueval = 1; //聲明一個全局變數
2
fakeval = 2; //創建一個全局變數
3
this.fackval2 = 3; //同上
4
delete trueval //false 變數沒有被刪除
5
delete fakeval //true 變數被刪除
6
delete this.fackval2 //true 變數被刪除
     
您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 一、 子查詢的定義 出現在其他語句中的select語句,稱為子查詢或者內查詢,外部的查詢語句稱為主查詢或者外查詢,子查詢可以包含普通select可以包含的任何語句。 外部查詢:select、insert、update、delete、set等,主要就是在select的應用。 二、 子查詢的分類 1.按 ...
  • 為什麼引入CSS Modules 或者可以這麼說,CSS Modules為我們解決了什麼痛點。針對以往我寫網頁樣式的經驗,具體來說可以歸納為以下幾點: 全局樣式衝突 過程是這樣的:你現在有兩個模塊,分別為A、B,你可能會單獨針對這兩個模塊編寫自己的樣式,例如a.css、b.css,看一下代碼 下麵是 ...
  • 假鏈接,其實就是指向當前頁面的一個鏈接,他具有鏈接的樣式,但不會跳轉。有時候在寫前端頁面的時候,沒有後臺的數據,我們的鏈接指向就成問題。因為你不知道要指向哪裡,這時候就可以給他設置一個假鏈接,等到後臺代碼開發出來,再重新改過來。 假鏈接有兩種形式,<a href ="#" ></a>,<a href ...
  • 譯者按: 搞定面試,不要急著刷題,先弄懂什麼是數據結構! 原文 : "The top data structures you should know for your next coding interview" 譯者 : "Fundebug" 為了保證可讀性,本文采用意譯而非直譯。另外,本文版權歸 ...
  • 我之前因為項目用bootstrap比較多,所以使用font awesome字體圖標比較多,後來接觸到了iconfont,發現想要的什麼圖標都有,還可以自定義圖標,非常強大!之前看了一波教程,覺得繁瑣,自己弄明白後感覺如此簡單,做了這麼個簡單教程,直接上圖,簡單粗暴,避免新手走彎路,這裡講解的預設是元 ...
  • WebSocket是單個TCP連接上進行全雙工通信的協議 在WebSocket的API中,客戶端與伺服器只需要進行一次握手就可以保持持久的連接,並可以雙向傳輸數據 與HTTP不同的是,WebSocket需要先創建連接,連接成功之後就可以進行通信,而且通信時,請求頭部可以減少部分狀態信息 創建WebS ...
  • 這篇隨筆主要是簡述一下js保留字的各種能力,會慢慢的更。。。 ...
  • npm全稱Node Package Manager,是node.js的模塊依賴管理工具。由於npm的源在國外,所以國內用戶使用起來各種不方便。我們通過設置使用[淘寶](https://npm.taobao.org/)的鏡像來加快我們的速度。### 臨時使用```npm --registry http... ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...