變數的型別和計算
阿新 • • 發佈:2020-12-28
技術標籤:jsjavascript
變數型別和計算
一、值型別和引用型別
值型別是直接賦值的,資料型別有:‘字串’,‘數值’,‘布林’,‘symbol’,‘undefined’
引用型別賦值的是堆中的記憶體地址,資料型別有:‘物件’,‘字串’,‘null’,‘函式’
‘null’是一個特殊型別,指標指向空地址
const obj1={x:100,y:200}
const obj2=obj1
let x1=obj1.x
obj2.x=101
x1=102
console.log(obj1) //{x:101}
// 這裡的let x1=obj.x; 是一個干擾,定義了一個數值型別,不是引用型別
二、typeof運算子
typeof能判斷所有值型別,null判斷出的是object
//注意判斷值型別判斷和引用型別
//注意判斷是陣列還是物件
//遞迴
//手寫深拷貝
<script>
arr=[100, [{a : 'hello'}, {b : "world"}], { c: "123456789" }];
//判斷修改的是不是'object'或者null,如果不是 object 或者 null 那麼直接返回
function deepClone(obj = {}) {
if (typeof obj !== 'object' || obj == null) {
return obj;
}
let result;
//判斷上面下來的obj是不是陣列 用instanceof來檢測 因為是陣列引用型別
obj instanceof Array?result=[]:result={}
for (var item in obj) {
//查詢一個物件是否有某個屬性
if (obj.hasOwnProperty(item)) {
// 遞迴呼叫
result[ item] = deepClone(obj[item])
}
}
return result;
}
let arr1=deepClone(arr);
arr1[1][0].a='vue'
arr1[0]=99
console.log('原陣列',arr)
console.log('新陣列',arr1)
</script>
三、變數計算-型別轉換
1.字串拼接
let a=100+10; //110
let b=100+'10'; //'10010'
let c=true+'10' //'true10'
2.==運算子
==隱式的做一些型別轉換,長詩相等
// 除了==null或undefined,其他一律都用===
100=='100' //true
0=='' //true
0==false //true
false=='' //true
null==undefined //true
3.if語句和邏輯語句
如果是兩步非true運算就是 truly變數
如果是兩步非false運算就是 falsely變數
// 除了這些是falsely變數,其他都是truely變數
!!0===false
!!NaN===false
!!""===false
!!null===false
!!undefined===false
!!false===false
//truly變數
conse a=true;
if(a){
//...
}
//falsely變數
const c=''
if(c){
//...
}
//truly會直接返回
console.log(10&&0) //0
console.log(''||'abc') //'abc'
console.log(!window.abc) //true