1. 程式人生 > 其它 >變數的型別和計算

變數的型別和計算

技術標籤: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