JavaScript學習筆記(十四)——對象

来源:http://www.cnblogs.com/whucs2012/archive/2017/11/30/7929404.html
-Advertisement-
Play Games

在學習廖雪峰前輩的JavaScript教程中,遇到了一些需要註意的點,因此作為學習筆記列出來,提醒自己註意! 如果大家有需要,歡迎訪問前輩的博客https://www.liaoxuefeng.com/學習。 標準對象 在JavaScript的世界里,萬物皆對象。 但是對象與對象之間也有區別。為了區分 ...


在學習廖雪峰前輩的JavaScript教程中,遇到了一些需要註意的點,因此作為學習筆記列出來,提醒自己註意!

如果大家有需要,歡迎訪問前輩的博客https://www.liaoxuefeng.com/學習。


標準對象

在JavaScript的世界里,萬物皆對象。

但是對象與對象之間也有區別。為了區分對象的類型,我們可以用 typeof 操作符來獲取對象的類型,它總是返回一個對象的類型:

typeof 123; // 'number'
typeof NaN; // 'number'
typeof 'str'; // 'string'
typeof true; // 'boolean'
typeof undefined; // 'undefined'
typeof Math.abs; // 'function'
typeof null; // 'object'
typeof []; // 'object'
typeof {}; // 'object'

 從上面的例子我們可以看出, number , string , boolean , undefined , function 不同於其他的類型。 null 的類型是 object , Array 的類型也是 object ,所以,通過 typeof 操作符,我們無法區分 null ,Array 和通常意義上的 object —— { } 

包裝對象

除了以上這些標準類型外,JavaScript還提供了包裝對象,就好像Java裡面 int 與 Integer 的關係

在JavaScript中, number , boolean , string 都有它們對應的包裝對象。包裝對象用 new 來創建。

var n = new Number(123); // 123,生成了新的包裝類型
var b = new Boolean(true); // true,生成了新的包裝類型
var s = new String('str'); // 'str',生成了新的包裝類型

雖然包裝對象看上去和原來的值一模一樣,但是它們的類型已經變成了 object 類型,所有,用 == 來比較包裝對象和原始值,會返回 false 

typeof new Number(123); // 'object'
new Number(123) === 123; // false

typeof new Boolean(true); // 'object'
new Boolean(true) === true; // false

typeof new String('str'); // 'object'
new String('str') === 'str'; // false

所以在非必要情況下,不要隨意使用包裝對象,尤其是針對string類型

註意:如果我們在使用 Number , Boolean 和 String 時,沒有用new關鍵字來創建對象, Number() , Boolean() , String() 會被當做普通對象,把傳入的任何類型的數據轉換為 number , boolean , string 類型(不是其包裝類型)

var n = Number('123'); // 傳入字元串“123”,相當於parseInt()或parseFloat()
typeof n; // 'number' 123

var b = Boolean('true'); // 傳入字元串“true”,結果為true
typeof b; // 'boolean' 

var b2 = Boolean('false'); //傳入字元串'false',結果為true!因為它是非空字元串!
var b3 = Boolean(''); // 空字元串,結果為false

var s = String(123.45); // 傳入數字123.45,結果為string字元串‘123.45’
typeof s; //  'string'

總結

在JavaScript中,使用標準對象和包裝對象時,需要遵循一下幾點:

  1. 不要使用new Number() ,new Boolean() ,new String() 來創建包裝對象;
  2. 使用parseInt() 和parseFloat() 可以將任意類型轉換為number 類型;
  3. 使用String() 可以將任意類型轉換成string 類型,或者直接調用某個對象的toString() 方法;(null,undefined沒有此方法
  4. 一般不用把任意類型轉換為 boolean 再判斷,直接寫成 if (myVar) {...} 即可;
  5. 使用typeof 操作符可以判斷出number ,boolean ,string ,function ,undefined ;
  6. 使用Array.isArray(arr) 來判斷是不是Array ;
  7. 使用myVar === null 來判斷是不是null ;
  8. 使用typeof window.myVar === 'undefined' 來判斷某個全局變數是否存在;
  9. 使用typeof myVar === 'undefined' 來判斷某個函數內部某個變數是否存在;

註意:

  • 以上5-9點註意事項,剛好可以判斷所有的標準數據類型。
  • 以上第3點註意事項中,並不是所有的對象都有 toString() 方法,null和undefined沒有此方法。
  •  number 對象調用 toString() 方法時,會報錯 SyntaxError :
123.toString(); // SyntaxError

//需要經過如下處理:
123..toString(); // '123', 註意是兩個點!
(123).toString(); // '123'

您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 網上找了很多版本嘗試都不行,最後在stackoverflow上找到一個,嘗試完美解決 具體操作步驟如下 1. 安裝jquery npm install jquery 2.安裝 type for jquery npm install -D @types/jquery 3.在組件中使用jquery im ...
  • 1.main.js 2.fs模塊,讀寫文件 3.http請求模塊 4.schedule.js, 任務調度模塊 5.sendQQemail.js,發送QQ郵件模塊 6.先簡單記錄下,以後有空再詳細說明 ...
  • MVVM是一種前端框架模式,框架模式主要是用來管理與組織代碼,在複雜應用中,利用高內聚低耦合的思想,將代碼分離組織到不同部分,每部分都有其關註點和職責,各部分間耦合度低,達到“關註點分離”目的,使整個應用更易管理、維護,每個部分可以單獨更新、替換以及復用,從而達到整個應用的模塊化。 一、概念 MVV ...
  • 在angular中,使用session處理 源碼如下: typescript import { Injectable } from '@angular/core'; import { AES, enc } from 'crypto js'; import { has, isNull, isUndef ...
  • 詳情:http://www.liu12fei08fei.top/ github個人博客綁定單獨阿裡功能變數名稱指南 起源 禁止微信重拍版 給github pages綁定功能變數名稱 獲取github pages的ip地址 配置阿裡雲功能變數名稱並解析(是功能變數名稱就行,是不是阿裡不重要) 配置github pages的custo ...
  • 這篇博文主要涉及到初學React時所總結的內容,也是我從最開始的認識React到後面的逐漸深入學習的歷程,而這篇是開始,當然不會是結束。 ...
  • 其實我們一樣可以很個性。。^_^ 效果實現:(附效果圖) 各位大神有什麼好的意見和指導敬請賜教~~ ...
  • 一. JavaScript語法目錄 二. 具體內容 2.1 語法 javaScript代碼要通過HTML/XHTML文檔才能執行。可以有兩種方式完成這一點,第一種是將JavaScript代碼放到文檔<head>標簽中的<Script>標簽之間: 另一種更好的方式是把JavaScript代碼存放為一個 ...
一周排行
    -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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...