JS基本類型、引用類型(對象)

基本類型:

基本類型值(數(shù)值、布爾值、字符串、null和undefined):指的是保存在棧內(nèi)存中的簡單數(shù)據(jù)段;

var a;
    var b;
    var obj;
    var obj2;
    a = 1;
    b = 2;
    b = a;
    console.log(a);
    console.log(b);
//值傳遞

引用類型:一切引用類型都是對象

對象

簡單說,所謂對象,就是一種無序的數(shù)據(jù)集合,由若干個“鍵值對”(key-value)構(gòu)

var obj = {
  p: 'Hello World'
};
{key: value} 

鍵名

  • 對象的所有鍵名都是字符串,所以加不加引號都可以。
  • 如果鍵名是數(shù)值,會被自動轉(zhuǎn)為字符串
  • 但是,如果鍵名不符合標(biāo)識名的條件(比如第一個字符為數(shù)字,或者含有空格或運(yùn)算符),也不是數(shù)字,則必須加上引號,否則會報錯。

屬性

  • 對象的每一個“鍵名”又稱為“屬性”(property),它的“鍵值”可以是任何數(shù)據(jù)類型。如果一個屬性的值為函數(shù),通常把這個屬性稱為“方法”,它可以像函數(shù)那樣調(diào)用。
  • 對象的屬性之間用逗號分隔,最后一個屬性后面可以加逗號(trailing comma),也可以不加

讀取屬性

  • 讀取對象的屬性,有兩種方法,一種是使用點(diǎn)運(yùn)算符,還有一種是使用方括號運(yùn)算符
  • 注意,如果使用方括號運(yùn)算符,鍵名必須放在引號里面,否則會被當(dāng)作變量處理。但是,數(shù)字鍵可以不加引號,因為會被當(dāng)作字符串處理。

查看所有屬性

  • 查看一個對象本身的所有屬性,可以使用Object.keys方法
  • for...in循環(huán)用來遍歷一個對象的全部屬性

刪除屬性

delete命令用于刪除對象的屬性,刪除成功后返回true

對象的引用:

如果不同的變量名指向同一個對象,那么它們都是這個對象的引用,也就是說指向同一個內(nèi)存地址。修改其中一個變量,會影響到其他所有變量。

引用類型值(對象、數(shù)組、函數(shù)、正則):

指的是那些保存在堆內(nèi)存中的對象,變量中保存的實(shí)際上只是一個指針,這個指針執(zhí)行內(nèi)存中的另一個位置,由該位置保存對象


    var obj = {
        name: 'xiaohui',
        sex: 'male',
        age: 18,
        friend: {
            name: 'hello', 
            age: 1000
        }
    }
    var newObj = {};
    var obj2 = obj;
    var obj3 = {name: 'hello'};
    var obj4 = {name: 'hello'};
    console.log (obj3 === obj4);
    function sum(){
        console.log('sum...')
    }
    var sum2 = sum;
    sum2()

函數(shù)的參數(shù)傳遞:按值傳遞

注意:

然后看你傳的參數(shù)是基本類型還是引用類型,基本類型是復(fù)制一個值,引用類型是復(fù)制一個地址;

function inc(n){
    n++;
}
var a = 10;
inc(a);
console.log(a);//10
function incObj(obj){
    //var obj = o //0x0001
    obj.n++;
}
var o = {n: 10};  //o = 0x0001
incObj(o);
console.log(o);  
//[object Object] {n: 11}

function squireArr( arr ){
    //var arr = 0x0011
    for(var i = 0; i < arr.length; i++){
        arr[i] = arr[i] * arr[i];
    }
}
function squireArr2( arr ){
    var newArr = [];
    for(var i = 0; i < arr.length; i++){
        newArr[i] = arr[i] * arr[i];
    }
    return newArr;
}

var arr = [2,1,3,6]; //arr  0x0011
squireArr(arr);
console.log(arr); // [4,1,9,36]

var arr2 = squireArr2(arr)
console.log(arr2);//[16, 1, 81, 1296]
console.log(arr);//[4, 1, 9, 36]

對象淺拷貝和深拷貝:

淺拷貝

function shallowCopy(oldObj) {
    var newObj = {};
    for(var i in oldObj) {
        if(oldObj.hasOwnProperty(i)) {
            newObj[i] = oldObj[i];
        }
    }
    return newObj;
}

深拷貝

// 遞歸實(shí)現(xiàn)一個深拷貝
function deepCopy1(oldObj){
    var newObj ={};
    for ( var key in oldObj ){
        if(typeof oldObj[key]==="object"){
            newObj[key]=deepCopy1(oldObj[key]);
        }else{
            newObj[key]=oldObj[key];
        }
    }
    return newObj;
}
//用JSON實(shí)現(xiàn)深拷貝

function deepCopy2(obj){
     return JSON.parse(JSON.stringify(obj));
}
var obj = {
    name:"xiao hui",
    age:18,
    info:{
        sex:"男",
        愛好:"女"
    }
}
obj2=deepCopy1(obj);
obj3=deepCopy2(obj);
console.log(obj2);
console.log(obj===obj2);//false
console.log(obj3);
console.log(obj===obj3);//false

//進(jìn)階版

    nation : '中國',
    birthplaces:['北京','上海','廣州'],
    skincolr :'yellow',
    friends:['sk','ls']
  }
  function deepCopy(obj,res){
    var  res= res||{};
    for( let i in obj){
      if(typeof obj[i]==="object"){
        if(obj[i] instanceof Object){
          res[i]={};
        }else{
          res[i]=[];
        }
        deepCopy(obj[i],res[i]);
      }else{
        res[i]=obj[i];
      }
    }
    return res;
  }
  var result = {name:'result'}
  result = deepCopy(china,result)
   console.dir(result)
  console.dir(result===china)
// Objectbirthplaces: {0: "北京", 1: "上海", 2: "廣州"}friends: {0: "sk", 1: "ls"}name: "result"nation: "中國"skincolr: //"yellow"__proto__: Object
//false

作者:彭榮輝
鏈接:http://www.itdecent.cn/u/0f804364a8a8
來源:簡書
著作權(quán)歸作者所有。商業(yè)轉(zhuǎn)載請聯(lián)系作者獲得授權(quán),非商業(yè)轉(zhuǎn)載請注明出處。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 第2章 基本語法 2.1 概述 基本句法和變量 語句 JavaScript程序的執(zhí)行單位為行(line),也就是一...
    悟名先生閱讀 4,596評論 0 13
  • 標(biāo)簽: 我的筆記 ---學(xué)習(xí)資料:http://javascript.ruanyifeng.com/ 1. 導(dǎo)論 ...
    暗夜的怒吼閱讀 951評論 0 1
  • 夜深了萬籟無聲,躺在床上想心事,如今我早過弱冠之年,空有五尺微命,茫然四顧,是身無長物。 現(xiàn)在回想大學(xué)時光,發(fā)覺我...
    噠噠的小達(dá)閱讀 241評論 0 0
  • 常言道,人靠衣服馬靠鞍,三分長相七分打扮。我們這里還有俗語:先敬衣服后敬人。第一次見面要有合適的打扮,人的第一印象...
    李佩蘭閱讀 1,207評論 1 6
  • 今天早會給大家分享了一個泡泡糖的游戲。 游戲規(guī)則:我說泡泡糖,你們說粘哪里?我說粘胳膊,兩個人的胳膊要迅速粘在一起...
    蒙主閱讀 4,014評論 4 1

友情鏈接更多精彩內(nèi)容