易混亂javascript知識點簡要記錄

来源:https://www.cnblogs.com/dwvfw855/archive/2019/05/22/10906890.html
-Advertisement-
Play Games

一.== vs ==在做判斷時,如果對比雙方的類型不一樣的話,就會進行類型轉換 假如我們需要對比 x 和 y 是否相同,就會進行如下判斷流程: 首先會判斷兩者類型是否相同。相同的話就是比大小了 類型不相同的話,那麼就會進行類型轉換 判斷兩個類型是否為string 和number,是的話就將strin ...


一.== vs ===

==在做判斷時,如果對比雙方的類型不一樣的話,就會進行類型轉換

假如我們需要對比 xy 是否相同,就會進行如下判斷流程:

  1. 首先會判斷兩者類型是否相同。相同的話就是比大小了

  2. 類型不相同的話,那麼就會進行類型轉換

    判斷兩個類型是否為string 和number,是的話就將string轉換為number類型再判斷

    2 == '4'2 ==  4

     

    判斷其中一方是否為 boolean,是的話就會把 boolean轉為number 再進行判斷

    '2' == true'2' ==  12 ==  1
    View Code

     

    判斷其中一方是否為 object 且另一方為 string number ,是的話就會把 object 轉為原始類型再進行判斷

'1' == { name: 'laolarou' }
        ↓
'1' == '[object Object]'

 

=== 則就是判斷兩者類型和值是否完全相同

二.閉包

什麼是閉包

我的理解就是閉包就是能夠讀取其他函數內部變數的函數,閉包存在的意義就是讓我們可以間接訪問函數內部的變數

function A() {
​
  var a = 1
​
  window.B = function () {
​
      console.log(a)
​
  }
​
}
​
A()
​
B() // 1

 

之前前端部門面試的一個問題, 解決迴圈中var的問題 答出2種以上方案

第一種 給匿名函數傳參

 var arr = [];
​
for (var index = 0; index < 5; index++) {
​
   arr[index]=function (index)
​
   {
​
       return index;
​
   }(index);
​
    
​
  
​
}

 



第二種 閉包方式

for (var index = 0; index < 5; index++) {
​
   arr[index]=(function (index)
​
   {
​
        return function()
​
        {
​
              return index;
​
        };
​
   }(index));
​
    
​
    
​
}
​
console.log(arr[2]());

 

第三種使用let方式解決

for (let index = 0; index < 5; index++) {
​
   arr[index]=index;
​
    
​
    
​
}
​
console.log(arr[2]);

 

淺拷貝與深拷貝

淺拷貝的時候如果數據是基本數據類型,那麼就如同直接賦值那種,會拷貝其本身,如果除了基本數據類型之外還有一層對象,那麼對於淺拷貝而言就只能拷貝其引用,對象的改變會反應到拷貝對象上;但是深拷貝就會拷貝多層,即使是嵌套了對象,也會都拷貝出來。

原型與原型鏈

如何理解原型與原型鏈

原型

在 JavaScript 中,每當定義一個對象(函數也是對象)時候,對象中都會包含一些預定義的屬性。其中每個函數對象都有一個prototype 屬性,這個屬性指向函數的原型對象

let person={age:12,name:"laonarou"};
​
console.log(person);

 

當我們列印的時候發現多了一個__proto__ 屬性,每個js對象都有這個屬性,這個屬性指向原型,這個屬性是瀏覽器用來使用的,可以在瀏覽器列印位置找到 constructor ->prototype

 

原型鏈

__proto__constructor

每一個對象數據類型(普通的對象、實例、prototype......)也天生自帶一個屬性proto,屬性值是當前實例所屬類的原型(prototype)。原型對象中有一個屬性constructor, 它指向函數對象。

 

在JavaScript中萬物都是對象,對象和對象之間也有關係,並不是孤立存在的。對象之間的繼承關係,在JavaScript中是通過prototype對象指向父類對象,直到指向Object對象為止,這樣就形成了一個原型指向的鏈條,專業術語稱之為原型鏈。類似後端語言的繼承,很容易理解


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

-Advertisement-
Play Games
更多相關文章
  • 背景 頁面採用ajax獲取數據時,每訪問一次就會發送一次請求向服務端獲取數據,可是呢。 有些數據更新的又不頻繁,所以我就想著使用localStorage進行本地存儲,然後在固定間隔時在去更新數據。(下載地址:https://gitee.com/whnba/data_storage) 結構設計 exp ...
  • function judgeType(change) { if (arguments.length == 0) { return '0';//無參數傳入 } if (change === null) { return 'null' } if (change === un... ...
  • 1. vue散碎知識點學習 1.1. 特點 1. 數據渲染/數據同步 2. 組件化/模塊化 3. 其他功能路由,ajax,數據流 1.2. Vue.js學習資源 1. vuejs中文官網: 2. vuejs源碼: 3. vuejs官方工具: 1.3. Vue實例對象 1.4. 綁定事件 1.5. 父 ...
  • 有關Ajax的理解: 它其實就是存在在客戶端與伺服器之間的一個東西,它可以使你向伺服器調取數據的時候,只進行你想要的那部分的數據的刷新,其餘的不刷新,很大程度上減少了數據的交互。這樣就存在了一個問題是兩種傳遞的區別需要多加註意(個人理解兩種傳遞在時間上比的話,還是get傳遞好,因為POST還得先去和 ...
  • 簡單記錄一下 前段時間接到客戶需求:動態改變下拉列表框ComboBox輸入框的背景顏色。 剛開始想的很簡單在用戶選擇列表項的時候,判斷一下列表框的value值添加相應的背景顏色就OK了,然而在實際操作的時候發現,怎麼操作都沒有效果,後來檢查了一下html結構才知道原來操作的不是顯示在頁面上的元素,害 ...
  • 一、在運行rn app應用時,react-native run:ios 報錯出現 解決辦法: 1、react-native run-ios --simulator="iPhone 6",運行時指定啟動版本 2 、Open file: 打開:node_modules/react-native/loca ...
  • 有關JSON的個人理解: JSON其實就是一個獨立於任何編程語言的獨立的輕量的數據交換的東西,方便於人的閱讀和機器的解析。裡面的內容還是鍵值對的形式存在的,可以對其進行增刪改查的,但是當從資料庫中調用數據的時候,需要對其進行數據的轉換。 一、JSON含義: JSON的全稱是”JavaScript O ...
  • 一、ul無序列表 1、無序列表定義 無序列表是一個項目的列表,此列項目使用粗體圓點(典型的小黑圓圈)進行標記。 無序列表始於 <ul>標簽。每個列表項始於 <li>。 ul標簽結構: <ul> <li>清心</li> <li>海牙</li> <li>玄武</li> </ul> 2、無序列表項目符號  ...
一周排行
    -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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...