js 深比較和淺比較
淺比較:
基本型別會比較值是否相等
複雜型別會比較引用地址是否相等,如===
深比較:
複雜型別遞迴遍歷裡面的每一個屬性值是否相等
程式碼示例:
淺比較:
{a:1} === {a:1} // false
const m = {a:1};
const n = {a:1};
m === n //false
const m = {a:1};
const n = m;
m === n //true
const m = {a:1};
m === {a:1} //false
changeValue(params) {
params.a = 2;
return params;
}
const m = {a:1};
const n = changeValue(m);
m === n //true
m //{a:2}
n //{a:2}
ps: 這裡`changeValue`方法直接修改了傳入的引數`params`,這麼做造成的後果是把 `m`的值也改變了
(因為javascript中,基本型別是傳值呼叫,引用型別是傳引用呼叫)
所以這種做法在`webstrom`中也會有警告,儘量不要這麼做;
相關文章
- js比較日期JS
- js比較日期 - JavaScriptJSJavaScript
- CORS/JSONP比較CORSJSON
- js與jq比較JS
- Jsonunit 比較jsondiffJSON
- Oracle date 型別比較和String比較Oracle型別
- react-redux的淺比較ReactRedux
- JS變數比較陷阱JS變數
- TCP和UDP比較TCPUDP
- Java和JavaSciprt比較Java
- Redis 和 Memcached 比較Redis
- MongoDB和Redis比較。MongoDBRedis
- MongoDB和MySQL比較MongoDBMySql
- ETL和EAI比較AI
- 還在比較 JSON 和 XML?Stop!JSONXML
- Go和Python比較的話,哪個比較好?GoPython
- AngularJS 、Backbone.js 和 Ember.js 的比較AngularJS
- Python解惑:整數比較 is ==的比較Python
- React與Vue模板使用比較(一、vue模板與React JSX比較)ReactVueJS
- 字串比較字串
- Integer比較
- 比較集合
- etcd和redis比較Redis
- 比較RAC和RxSwiftSwift
- Swift和Objective C比較SwiftObject
- XMLHttpRequest和fetch比較XMLHTTP
- [Oracle] minus 和 not exists比較Oracle
- ORACLE 中IN和EXISTS比較Oracle
- 比較字串和數字串字串
- ejb 和 javabean的比較JavaBean
- 索引的分析和比較索引
- ImageMagic 和 GraphicsMagick 的比較
- java多執行緒:synchronized和lock比較淺析Java執行緒synchronized
- 淺談前端MOCK資料工具比較前端Mock
- redux connect的淺比較說明Redux
- Go 與 C++ 的對比和比較GoC++
- js 中style.height和offsetHeight比較JS
- JSON-RPC-Java 和DWR比較(轉)JSONRPCJava