01-JS資料

JS數據類型

var str = 'abc';
var num = 123;
var bool = true;
var und = undefined;
var n = null;
var arr=['x','y','z'];
var obj = {};
var fun = function() {};
console.log(typeof str);   //string
console.log(typeof num);   //number
console.log(typeof bool); //boolean
console.log(typeof und);   //undefined
console.log(typeof n);     //object
console.log(typeof arr);   //object
console.log(typeof obj);   //object
console.log(typeof fun);   //function 

對象

對象常用屬性和方法

SON.stringify() 方法是將一個JavaScript值(對象或者數組)轉換為一個 JSON字符串; JSON.parse() 方法用于將一個 JSON 字符串轉換為對象。

hasOwnProperty() 該方法可以判斷對象的自有屬性是否存在

assign() 該方法主要用于對象的合并,Object.assign(o1,o2)

defineProperties()直接在一個對象上定義新的屬性或修改現有屬性,并返回該對象。

keys() 返回一個由一個給定對象的自身可枚舉屬性組成的數組,Object.keys(o);

values();返回一個給定對象自己的所有可枚舉屬性值的數組

entries();返回一個給定對象自身可枚舉屬性的鍵值對數組

屬性的設置和獲取

1、設置屬性

var obj = {};

obj.name='aaaa';

obj['age'] = 20;

2、獲取屬性

obj.name;

obj['age'];

3、屬性的刪除

var o2= { name:'abc', age:18 };

delete o2.name; ? ?

console.log(o2);

檢測屬性

檢測屬性 該方法可以判斷對象的自有屬性是否存在

in 運算符 檢測屬性是否存在于某個對象中,自有屬性和繼承屬性都返回true

var obj={ name:'sonia', age:22 };

console.log('name' in obj);//自有屬性

引用類型如何深拷貝

//引用類型深拷貝?結果證明是淺拷貝
//如果對象只有一級屬性,Object.concat可以實現深拷貝
var arr1 = [1,2,3,[4,5]]
var arr2 = arr1.concat()
arr1.push(11)
arr1[3][0]=100; 
console.log(arr1);
console.log(arr2);//Object.assign對于對象1級屬性,可以是深拷貝,多級屬性是淺拷貝
var o1= {id:10}
var o2 = Object.assign({},o1);
o1.id = 100
console.log(o1.id);
console.log(o2.id);var o1= {id:10,test:'o1',children:{v:'o1'}}
var o2 = Object.assign({},o1);
o1.id = 100
o1.children.v='v2';
console.log(o1);
console.log(o2);

最簡單的深拷貝方法是序列化

  var obj = {name: "fangfang",age: 18,children: { id: 1 },};var obj2 = JSON.parse(JSON.stringify(obj));obj.name = "alice";obj2.children.id = 99;console.log(obj);console.log(obj2);

但是序列化實現深拷貝有很多坑:

  1. 如果obj里存在時間對象,JSON.parse(JSON.stringify(obj))之后,時間變成了字符串
  2. 如果obj里有RegExp、Error對象,則序列化后的結果只得到空對象
  3. 如果obj里有函數、undefined,則序列化的結果會把函數undefined丟失
  4. 如果obj里有NaN,Infinity,則序列化的結果會變成null
  5. JSON.stringify只能序列化對象的可枚舉的自有屬性。如果obj中的對象是由構造函數生成的,則使用JSON.parse()深拷貝后,會丟棄對象的constructor
  6. 如果對象中存在循環引用的情況,也無法進行正確的深拷貝

自定義深拷貝方法

  function deepCopy(newObj, obj) {var o = newObj;for (var key in obj) {if (typeof obj[key] === "object") {//判斷obj[key]的類型,是數組還是對象,使用constructor嚴格判斷對象是由誰構造出來的o[key] = obj[key].constructor === Array ? [] : {};deepCopy(o[key], obj[key]);} else {o[key] = obj[key];}}return o;}

預解析

JavaScript預解析,可以理解為把變量或者函數預先解析到使用的環境中

console.log(a);
var a = 10;
//結果輸出undefined

預解析過程

第一步:預先解析var、function等,提升聲明變量

第二步:預解析完畢后,逐行正常由上而下解析

f();//error
//函數表達式
var f = function () {};fn();//OK
//函數聲明
function fn() {}//函數表達式和函數聲明的最大區別是:預解析。函數聲明有預解析功能
//也就是function聲明的函數會在執行前提前解析

如果變量名和函數名相同了,誰的優先級高?

console.log(f);
function f(){console.log("456");
}
var f = 123;
//結果輸出:[Function: f]console.log(f);
var f = 123;
function f(){console.log("456");
}
//結果還是輸出:[Function: f]

同名函數和變量,函數的優先級會更高,也就是函數取代變量。

方法內部也存在預解析:

  var b = 10;function f3() {console.log(b);var b = 100;}f3(); //undefined/**************解析過程***************/var b;function f3(){}b=10;f3();//f3方法內部預解析var b;console.log(b);//此時是undefinedb=100;

作用域

作用域:它是指對某一變量和方法具有訪問權限的代碼空間,在JS中, 作用域是在函數中維護的。

表示變量 或函數起作用的區域,指代了它們在什么樣的上下文中執行,亦即上下文執行環境

ES5的作用域只有兩種:全局作用域和局部作用域(局部作用域又叫函數作用域)

var a = 1;
//if(true)的語句執行完成之后會自動銷毀,從而將var a = 10,提升為全局變量
if (true) {
var a = 10;
}
console.log(a); //輸出10

全局變量和局部變量同名的坑:

1、在全局變量和局部變量不同名時,其作用域是整個程序

2、在全局變量和局部變量同名時,全局變量的作用域不包含同名局部變量的作用域

var c = 30;
function f2(){var c;console.log(c);
} 
f2();//undefined

作用域鏈

執行函數的時候,先從函數內部尋找變量,如果找不到,會向創建函數的作用域內尋找變量

  var a = 1;function f1() {var a = 10;function f2() {var a = 20;console.log(a);//20}function f3() {console.log(a);//10}f2();f3();}f1();console.log(a);//1

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/85652.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/85652.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/85652.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

學習日記-day34-6.20

知識點: 1.快速入門 知識點 核心內容 重點 IOC容器創建 通過ClassPathXmlApplicationContext加載XML配置文件創建容器,關聯beans.xml 容器與配置文件的綁定關系(多配置文件支持) Bean獲取方式 1. getBean(String id)返回…

如何使用 neptune.ai 優化模型訓練期間的 GPU 使用率

GPU 可以大大加速深度學習模型的訓練,因為它們專門用于執行神經網絡核心的張量運算。 由于 GPU 是昂貴的資源,因此充分利用它們至關重要。GPU 使用率、內存利用率和功耗等指標可以洞悉資源利用率及其改進潛力。提高 GPU 使用率的策略包括混合精度訓練、優…

騰訊混元3D制作簡單模型教程-1

騰訊混元3D制作簡單模型的零門檻教程,涵蓋新手快速入門與進階操作,結合官方工具特性及行業實踐,分為兩個核心板塊: ?? 一、新手零門檻:5分鐘生成可打印模型(適合完全小白) 通過騰訊元寶APP的“3D角色夢工廠”功能,無需任何建模基礎: 上傳照片 打開騰訊元寶APP → …

一個庫,比如kott_tinymce ,想把的依賴庫從kotti升級到kotti2 ,請問我是不是查找替換,把所有的kotti字符替換成kotti2就行了?

一個庫,比如kott_tinymce ,想把的依賴庫從kotti升級到kotti2 ,請問我是不是查找替換,把所有的kotti字符替換成kotti2就行了? kotti和kotti2的包結構、模塊路徑、接口完全一樣,除了import kotti 變成kotti2 如果 kotti…

企業實踐 | 銀河麒麟KylinOS-V10(SP3)高級服務器操作系統基礎安裝指南

前言:國產操作系統的崛起與實踐背景 在國產化浪潮與信息技術自主可控的大背景下,銀河麒麟操作系統作為國產操作系統的代表之一,正逐步成為企業級應用的重要選擇。本文將詳細介紹銀河麒麟高級服務器操作系統V10 SP3版本的基礎知識與安裝實踐&…

Ubuntu 一鍵安裝 ROS

Ubuntu 一鍵安裝 ROS 安裝命令如下: wget http://fishros.com/install -O fishros && . fishros 指令執行后,顯示log如下圖: 之后根據不同的系統安裝對應的ros版本即可。

深度學習——基于卷積神經網絡實現食物圖像分類【4】(使用最優模型)

文件目錄 引言一、環境準備二、數據預處理訓練集預處理說明:驗證集預處理說明: 三、自定義數據集類四、設備選擇五、CNN模型構建六、模型加載與評估1. 加載預訓練模型2. 準備測試數據3. 測試函數4. 計算準確率 七、完整代碼八、總結 引言 本文將詳細介紹…

C++基礎算法————并查集

C++并查集詳解與實戰指南 一、引言 并查集(Union-Find)是一種高效的數據結構,用于處理一些不相交集合的合并與查詢問題。它在圖論、社交網絡、網絡連通性等領域有廣泛的應用。并查集的核心思想是通過一個數組來記錄每個元素的父節點,從而將元素組織成若干棵樹,每棵樹代表…

系統性能優化的關鍵手段

系統性能的提升方向 服務器并發處理能力:通過優化內存管理策略、選擇合適的連接模式(長連接或短連接)、改進 I/O 模型(如 epoll、IOCP)、以及采用高效的服務器并發策略(如多線程、事件驅動等)&a…

httpclient實現http連接池

HTTP連接池是一種優化網絡通信性能的技術,通過復用已建立的TCP連接減少重復握手開銷,提升資源利用率。以下是關鍵要點: 核心原理與優勢 ?連接復用機制? 維護活躍連接隊列,避免每次請求重復TCP三次握手/SSL協商,降低…

廣義焦點丟失:學習用于密集目標檢測的合格和分布式邊界盒之GFL論文閱讀

摘要 一階段檢測器通常將目標檢測形式化為密集的分類與定位(即邊界框回歸)問題。分類部分通常使用 Focal Loss 進行優化,而邊界框位置則在狄拉克δ分布下進行學習。最近,一階段檢測器的發展趨勢是引入獨立的預測分支來估計定位質量,所預測的質量可以輔助分類,從而提升檢…

Real-World Deep Local Motion Deblurring論文閱讀

Real-World Deep Local Motion Deblurring 1. 研究目標與實際問題意義1.1 研究目標1.2 實際問題1.3 產業意義2. 創新方法:LBAG模型與關鍵技術2.1 整體架構設計2.2 關鍵技術細節2.2.1 真實模糊掩碼生成(LBFMG)2.2.2 門控塊(Gate Block)2.2.3 模糊感知補丁裁剪(BAPC)2.3 損…

【Docker基礎】Docker鏡像管理:docker commit詳解

目錄 引言 1 docker commit命令概述 1.1 什么是docker commit 1.2 使用場景 1.3 優缺點分析 2 docker commit命令詳解 2.1 基本語法 2.2 常用參數選項 2.3 實際命令示例 2.4 提交流程 2.5 步驟描述 3 docker commit與Dockerfile構建對比 3.1 構建流程對比 3.2 對…

可調式穩壓二極管

1.與普通穩壓二極管的比較: 項目普通穩壓二極管可調式穩壓二極管(如 TL431)輸出電壓固定(如5.1V、3.3V)可調(2.5V ~ 36V,取決于外部分壓)精度低(5%~10%)高&a…

Kafka使用Elasticsearch Service Sink Connector直接傳輸topic數據到Elasticsearch

鏈接:Elasticsearch Service Sink Connector for Confluent Platform | Confluent Documentation 鏈接:Apache Kafka 一、搭建測試環境 下載Elasticsearch Service Sink Connector https://file.zjwlyy.cn/confluentinc-kafka-connect-elasticsearch…

訊方“教學有方”平臺獲華為昇騰應用開發技術認證!

教學有方 華為昇騰應用開發技術認證 權威認證 彰顯實力 近日,訊方技術自研的教育行業大模型平臺——“教學有方”,成功獲得華為昇騰應用開發技術認證。這一認證不僅是對 “教學有方” 平臺技術實力的高度認可,更標志著訊方在智慧教育領域的…

保護你的Electron應用:深度解析asar文件與Virbox Protector的安全策略

在現代軟件開發中,Electron框架因其跨平臺特性而備受開發者青睞。然而,隨著Electron應用的普及,如何保護應用中的核心資源文件——asar文件,成為了開發者必須面對的問題。今天,我們將深入探討asar文件的特性&#xff0…

端口安全配置示例

組網需求 如圖所示,用戶PC1、PC2、PC3通過接入設備連接公司網絡。為了提高用戶接入的安全性,將接入設備Router的接口使能端口安全功能,并且設置接口學習MAC地址數的上限為接入用戶數,這樣其他外來人員使用自己帶來的PC無法訪問公…

零基礎RT-thread第四節:電容按鍵

電容按鍵 其實只需要理解,手指按上去后充電時間變長,我們可以利用定時器輸入捕獲功能計算充電時間,超過無觸摸時的充電時間一定的閾值就認為是有手指觸摸。 基本原理就是這樣,我們開始寫代碼: 其實,看過了…

SQL基礎操作:從增刪改查開始

好的!SQL(Structured Query Language)是用于管理關系型數據庫的標準語言。讓我們從最基礎的增刪改查(CRUD)?? 操作開始學習,我會用簡單易懂的方式講解每個操作。 🛠 準備工作(建表…