typeof,instanceof的區別,擴展知識:顯示原型(prototype)與隱式類型(__protot__)

来源:https://www.cnblogs.com/crushxz/archive/2019/10/14/11670481.html

3.typeof 和instanceof區別 1.typeof 主要用於判斷對象類型 類型有: 1.object 2.function 3.number 4.string 5.boolean 6.undefined 7.symbol =>一種標識唯一性的ID 註意:每個symbol屬性都是唯一的,任 ...


3.typeof 和instanceof區別

1.typeof

主要用於判斷對象類型

console.log(typeof null)          //object
console.log(typeof undefined)     //undefined
console.log(typeof [1,2,3])       //object
console.log(typeof Boolean)       //function
console.log(typeof 1)             //number
console.log(typeof '1')           //string
console.log(typeof String)        //function
console.log(typeof boolean)       //undefined
console.log(typeof true)          //boolean
console.lig(typeof symbol)        //symbol
console.log(typeof Function)      //function

 

類型有:

1.object

2.function

3.number

4.string

5.boolean

6.undefined

7.symbol =>一種標識唯一性的ID

註意:每個symbol屬性都是唯一的,任意兩個symbol都不相等

2.instanceof

instanceof 運算符用於檢測構造函數的 prototype 屬性是否出現在某個實例對象的原型鏈上。

右邊必須為一個對象

console.log(typeof null)          //object
console.log(typeof undefined)     //undefined
console.log(typeof [1,2,3])       //object
console.log(typeof Boolean)       //function
console.log(typeof 1)             //number
console.log(typeof '1')           //string
console.log(typeof String)        //function
console.log(typeof boolean)       //undefined
console.log(typeof true)          //boolean
console.lig(typeof symbol)        //symbol
console.log(typeof Function)      //function

 

註意:每個函數的原型鏈上都有原型,再上面都有對象

1.顯示原型 : prototype

只要創建一個新的函數,就會為該函數創建一個prototype屬性.該屬性指向函數的原型對象.所有原型對象都會自動獲得一個constructor構造函數屬性,該屬性指向prototype屬性所在函數的指針.

2.隱式原型 : __proto__

隱式原型指向創建這個對象的函數的prototype.

object.peototype.__proto__ == null

 

註意:通過Function.prototype.bind方法構造出來的函數沒有prototype屬性。

3.顯示原型與隱式原型的區別和聯繫
function P(){}
let p1 = new P();
p1.__proto__ === P.prototype //true
P.prototype  //  {constructor: ƒ}
P.prototype.constructor === P //true
P.__proto__ === Function.prototype //true

 

1.對象只有__proto__屬性,這個屬性是指向他的構造函數的prototype屬性

function B(b){
    this.b = b;
}
var b = new B('seanxiao')
console.log(b)

 

b對象的屬性是__proto__,指向構造函數B的prototype,B.protptype.__proto__指向Object.prototype

Object.protptype.__protp__是null

而則一層一層的鏈接 關係就是原型鏈。


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

更多相關文章
  • 看了知乎上的話題 如何才能通俗易懂的解釋javascript裡面的‘閉包’?,受到一些啟發,因此結合實例將回答中幾個精要的答案做一個簡單的分析以便加深理解。 1. "閉包就是跨作用域訪問變數。" 【示例一】 在 getName 函數中獲取 name,首先在 getName 函數的作用域中查找 nam ...
  • 前面,跟大家簡單地介紹了負載均衡和Nginx的一些基礎配置( "Nginx負載均衡配置實例" ),接下來,跟大家介紹一下Nginx的常用命令,便於日常的運維。 "查看原文" 停止Nginx的方法 通過之前的學習,大家知道瞭如何配置並啟動Nginx,但如果想停止Nginx服務,該如何操作呢?下麵介紹停 ...
  • npm multer 文件上傳 Express app 範本就不寫了,僅記錄一下上傳部分的代碼。 const fs = require('fs'); const express = require('express'); const multer = require('multer'); const ...
  • webpack 插件 ProvidePlugin:自動載入模塊,而不必到處 import 或 require 。 ...
  • 一.a標簽完成 二.js實現下載 三.js中ajax實現音頻或者視頻不跳轉進行文件下載 寫代碼的思路 四.fetch實現 ...
  • 參考自網站:https://segmentfault.com/a/1190000011779959 插件安裝完成之後,還要對一些插件進行配置,例如: vetur預設配置, 配置的過程: 打開 文件 > 首選項 > 用戶設置(U) > 點擊右上角 打開設置(json) // 執行文字相關的導航或操作時 ...
  • 本資源是我在源代碼網站上發現的,內附幾十種背景動態特效,我單獨提取出來精品背景特效在此分享,文件里有20多種精品動態效果,本人覺得可用作於個人博客主頁背景,登陸頁面背景等,有20多個背景特效,非常漂亮。 附文件下載地址: https://github.com/chengpu2/web2 ...
  • 文件/大文件上傳功能實現(JS+PHP) 參考博文:掘金-橙紅年代 前端大文件上傳 路漫漫 其修遠 PHP + JS 實現大文件分割上傳 本文是學習文件上傳後的學習總結文章,從無到有實現文件上傳功能,前端小白寫的代碼不是最優,如果有錯誤的地方請多多指教,如果本文對你有所幫助,深感榮幸。 近期公司的項 ...
一周排行
  • 一、直接使用線程的問題每次都要創建Thread對象,並向操作系統申請創建一個線程,這是需要耗費CPU時間和記憶體資源的。無法直接獲取線程函數返回值無法直接捕捉線程函數內發生的異常 使用線程池可以解決第一個問題二、.NET中的線程池 在這裡只簡單的介紹一下ThreadPool,由於TPL的存在,我工作中... ...
  • 上次課程我們新建了管理員的模板頁。 本次我們就完善這個模板頁,順便加入樣式和一些基本的組件,配置好整個項目的UI風格。 一、引入 共用的css和js文件 後端庫用nuget, 前端庫用libman. 右鍵wwwroot文件夾,選擇菜單 Add / Client-Side Library 我們使用ad ...
  • 場景 在使用IIS部署ASP.NET的Web項目時提示: InvalidOperationException:未能映射路徑“/” 註: 博客: https://blog.csdn.net/badao_liumang_qizhi 關註公眾號 霸道的程式猿 獲取編程相關電子書、教程推送與免費下載。 實現 ...
  • 場景 ASP.NET中新建MVC項目並連接SqlServer資料庫實現增刪改查: https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/107024544 在上面實現了新建簡單的MVC項目以及連接資料庫實現簡單的增刪改查後怎樣將網站部署到 ...
  • --先給GridView控制項註冊滑鼠按下事件gv.MouseDown += new System.Windows.Forms.MouseEventHandler(this.gv_MouseDown); --在滑鼠按下事件裡面增加滑鼠右鍵判斷,並增加滑鼠右鍵菜單複製單元格功能。 private voi ...
  • 用C#代替Javascript來做Web應用,是有多爽? 今天聊聊 Blazor。 Blazor 是一個 Web UI 框架。這個框架允許開發者使用 C# 來創建可運行於瀏覽器的具有完全交互 UI 的 Web 應用。 可以理解為,這是一個 C# 語言的 Vue / Angular / React,可 ...
  • 場景 ASP.NET中新建Web網站並部署到IIS上(詳細圖文教程): https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/107199747 在上面博客中已經將網站部署到了IIS上。 但是如果網站很大,頁面比較多,甚至每個頁面都有不少 ...
  • 從事這麼多年的.NET,這段時間來,學習另外一門技術Python。 購買相關的書籍,不停地看書。 然後在VS安裝Python,然後可以上機練習,編寫代碼...... ...
  • 一個微小的投入就會帶來巨大的突變 集群安全模式 為什麼出現集群安全模式呢? ​ Namenode啟動時,首先將鏡像文件載人記憶體,並執行編輯日誌中的各項操作。一旦在內存中成功建立文件系統元數據的映像,則創建一個新的Fsimage文件和一個空的編輯日誌。此時,** Namenode開始監聽Datanod ...
  • 1. 通過new對象實現反射機制( 對象.getClass() ) 2. 通過路徑實現反射機制( Class.forName("包名.類名") ) 3. 通過類名實現反射機制 ( 類名.Class ) class Student { private int id; String name; prot ...