數據類型及數據類型的檢測

来源:http://www.cnblogs.com/han6054/archive/2016/03/31/5343306.html
-Advertisement-
Play Games

基本數據類型 number string boolean underfined null; 引用數據類型 Object Array RegExp; typeof 檢測數據類型 但是不能檢測(對象、數組、正則) instanceof/constructor檢測某一個實例是否屬於一個類; 我們的cons ...


 

基本數據類型

number  string  boolean  underfined  null;

引用數據類型

Object  Array  RegExp;

 


typeof 檢測數據類型 但是不能檢測(對象、數組、正則)

instanceof/constructor檢測某一個實例是否屬於一個類;

我們的constructor可以避免instanceof檢測的時候,用Object也是true的問題;

console.log([].constructor === Object);//->false 

局限性:
1、用instanceof檢測的時候,只要當前的這個類在實例的原型鏈上(可以通過原型鏈__proto__找到它),檢測出來的結果都是true
2、基本數據類型不能用instanceof來檢測;

 


 

對於對象數據類型,兩種方式創建出來的都是所屬類的一個實例,而且都是對象數據類型的值,是沒有區別的,

var ary =[];
var ary = new Array;

對於基本數據類型來說,不管哪種方式創建出來的都是所屬類的一個實例,但字面量創建出來的是基本數據類型,實例創建的是對象數據類型

var num =1var num2 = new Number("1"); 
console.log(typeof num1,typeof num2);//->"number" "object"

3、在類的原型繼承中,instanceof檢測出來的結果其實是不准確的

 

function Fn(){    
} ;
Fn.prototype = new Array;
var f = new Fn;
console.log(f instanceof Array)-> true

雖然Fn繼承了Array,但是f沒有length和數字索引那些東西,所以f應該不是數組才對,但是instance檢測結果是true,以為f雖然不是數組,但是在f的原型鏈上可以找到Array;

 


 

 

Object.prototype.toString.call(value)

1)找到Object原型上的toString方法,讓方法執行,並且讓方法中的this變為value(value->就是我們要檢測數據類型的值);

 

->toString:一個方法,轉換為字元串數據類型用的方法
每一個數據類型所屬類的原型上都有toString方法,例如:Number.prototype/String.prototype/Array.prototype/Function.prototype...
除了Object上的toString,其他類原型上的toString都是把當前的數據值轉換為字元串的意思

->null和undefined比較的特殊:他們所屬類Null/Undefined的原型上也有toString,只不過不讓我們用而已,不僅如此其實類的原型都給屏蔽了;

->HTML元素對象的toString:雖然它的原型鏈很長,但是在其它類的原型上都沒有toString,只有在最底層Object.prototype這上才有;

var oDiv = document.getElementById("div1");
oDiv.toString();調用的其實也是Object.prototype.toString...

->alert、document.write這兩種輸出的方式其實都是把要輸出的內容先轉換為字元串,然後在輸出的

alert([]);//->""
 alert(true);//->"true"
 alert({})->這個就要調用Object.prototype上的toString了 

Object.prototype.toString是用來返回對應值的所屬類信息的

var oDiv = document.getElementById("div1");
 var obj = {};
 oDiv.toString();//->"[object HTMLDivElement]"
 obj.toString();//->"[object Object]"

原理:
->obj首先找到原型上toString方法,並且讓toString執行,toString方法執行的時候,裡面的this是obj,

同理oDiv.toString(),toString方法中的this是oDiv

->執行toString方法,返回當前方法中this的數據類型 ->"[object 當前this的直屬類]",

例如:"[object HTMLDivElement]"/"[object Object]"

Object.prototype.toString.call(12);->執行原型上的toString,並且讓方法中的this變為12,也就相當於返回的是12的直屬類的信息 ->"[object Number]"

Object.prototype.toString.call("hjj");//->"[object String]"
依此類推:
"[object Boolean]"/"[object Null]"/"[object Undefined]"/"[object Object]"/"[object Array]"/"[object RegExp]"/"[object Function]"/"[object Math]"/"[object Date]"...
->所有的數據類型都可以用它來檢測,而且非常的精準;

 

 


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

-Advertisement-
Play Games
更多相關文章
  • HTML5已經成為最流行的編程語言在web開發者。強大的編程語言有很大的能力,生產更好的萬維網內容。HTML5的興起已經在過去三年增長迅速。介紹了HTML5的新技術是更好的。HTML5技術是由像Chrome的瀏覽器,支持Firefox、IE和更多。今天,我們列出了十個HTML5動畫製作工具,可以幫助 ...
  • 最近的工作在做一個多步驟多分步的表單頁面,這個多步驟多分步的意思是說這個頁面的業務是分多個步驟完成的,每個步驟可能又分多個小步驟來處理,大步驟之間,以及小步驟之間都是一種順序發生的業務關係。起初以為這種功能很好做,就跟tab頁的實現原理差不多,真做下來才發現,這裡面的相關邏輯還是挺多的(有可能是我沒... ...
  • “我們正在用HTML5編寫我們下一套移動產品。”“是啊,這些天很多人在玩著Appcelerator,我也在玩著。”“嗯,但這並不是我要說的那種HTML5產品。” 最近,我有很多類似的交流對話,可能因為我正在開發一套HTML5的應用吧。就像2005年的“AJAX”,“HTML5”這個術語現在還沒有被清 ...
  • 前段時間做項目,有個功能是消息提醒。 我相信很多大牛都做過。下麵來分享我遇到的問題和解決方案。 首先我們的項目是用frameset框架,main代碼。 <frameset name="myFrame" cols="85,*" frameborder="no" border="0" framespac ...
  • 即將從事Web前端的工作的 先對即將從事的行業有個瞭解。 Web前端發展史: 第一個網頁誕生於90年代初,早期的網頁除了一些小圖片和毫無佈局可言的標題段落,其全由文字構成。然而隨著時代的進步,互聯網的不斷發展,接下來出現了表格佈局,此次是flash,最後是基於CSS的網頁設計。不可否認,前端頁面重構 ...
  • JavaScript中有三個可以對字元串編碼的函數,分別是: escape,encodeURI,encodeURIComponent,相應3個解碼函數:unescape,decodeURI,decodeURIComponent 。 下麵簡單介紹一下它們的區別 1 escape()函數 定義和用法es ...
  • 前面的話:JavaScript可運行在所有主要平臺的主流瀏覽器上,也可運行在每一個主流操作系統的伺服器端上。所以呢,要想成為一名優秀的全棧工程師,必須懂得JavaScript語言。這是我整理的JS的部分函數問題,供大家參考借閱,有不妥的地方也請多多指教。 1、函數的三要素 1.1 函數的功能 1.2 ...
  • 該篇隨我讀書的進度持續更新閱讀書目:《JavaScript設計模式》 2016/3/30: 模式是一種可復用的解決方案,可用於解決軟體設計中遇到的常見問題./將解決問題的方法製作成模板,並且這些模板可應用於多種不同的情況.有效模式的附加要求:適合性,實用性,適用性. 模式的優點: 防止局部問題引起大 ...
一周排行
    -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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...