JavaScript 經常使用基礎知識

一、數據類型:git

    1)原始類型: String Boolean Number Null Undefiend數組

    2)引用類型:Object ..........maven

總結:爲何老生常談數據類型呢?在開發中他們到底數據類型有什麼指引,我從不糾結Null究竟是Object類型仍是Undefiend類型,沒意義的東西不須要花費時間。可是,這裏他告訴咱們的是:原始類型永遠是對象的拷貝,傳值不傳址;然而,引用類型則傳的是引用,改變一個對象的引用會影響對象自己!因此,必定要記住5大原始數據類型。ide

/** 原始類型操做,傳值不傳址*/
var str = 'hello wrolld'; // new String('hello world') 一樣是傳值
function changeStr(str) {
  str = 'welcome';
}
changeStr(str);
console.info(str);

/** 對象引用操做,對象的引用發生改變,那麼會改變其餘的對象引用*/
var str = {
  key: 'hello world'
};
function changeStr(str) {
  str.key = 'welcome';
}
changeStr(str);
console.info(str.key);

二、對象屬性svn

    1)obj.property  學習

    2)obj[property]測試

總結:歷來就沒有什麼get方法來獲取屬性值的,都是語言學習多了搞混了。就好像,在Java中常用for(String str : list ) ; 然而在Javascript中若是這樣使用那麼必然錯誤,Javascript咱們應該這樣使用 for(var str in list ) ; 有些時候就是一不當心踩雷了!關於對象屬性,不要覺得上面兩種方法是相同的,其實兩者差別仍是有的,obj.property 那麼property必須不能是變量,只是一個obj定義的屬性名稱,並且這個名稱必須符合Javascript變量命名規範,不然你是沒法調用的,由於Javascript的對象能夠把1做爲屬性名稱,可是他是不符合命名規範的。若是你使用obj[property] 那就不同了,property是一個變量,這個變量能夠是任意的(好比數組遍歷的時候是數字,屬性遍歷的時候多是字符串等),他也能獲取對象對應的屬性值。因此,若是知道某個對象的屬性咱們可使用obj.property ; 若是咱們不知道大家應該採用第二種。code

var obj = new Object();
obj.name = 'maven';//必須符合變量的命名規範
obj[1] = 'git';//能夠像數組同樣創建索引,也就是一個屬性
obj[{name:'svn'}]='cvs';// 能夠傳入任何變量
for (var attr in obj) {
  console.info(obj[attr]);
}

三、刪除對象的屬性對象

    1) delete obj.property索引

    2) delete obj[property]

總結:網上看了不少資料,說刪除一個對象的屬性就是把他的值設置爲 undefined 或 Null ,說實話,我開始的時候真的相信了,由於,對象不存在就不是undefined嗎?後面,當我真正對代碼測試才發現被坑了,對象的屬性是沒法經過賦值來刪除的,不信你能夠本身用for in 去試試,結果就是這樣。尤爲是,我在把一個對象轉爲JSON字符串的時候想要刪除對象的一個屬性,若是你只是賦值爲Null ,那麼轉爲JSON不仍是有Null值嗎?因此,咱們應該採起以上的方式真正的刪除對象的屬性,讓對象的屬性不存在,即便使用for in  也沒法遍歷出來。 

var obj = {};
obj.name = 'key';
obj.value = 'mavne';
obj.age =12;
obj.phone= 156;
obj.identify = '@dfd_dfd';

console.info(JSON.stringify(obj))
delete obj['value']; // 刪除屬性value
delete obj.name; // 刪除屬性 name
obj.identify = undefined; // 屬性依舊存在,可是若是採用如下方法獲取JSON字符串是不會獲得identify屬性的
obj.age = null;// 屬性依舊存在,實質刪除了屬性對應的值,轉爲JSON字符串時仍是有這個屬性
console.info(JSON.stringify(obj))

四、刪除數組中指定的元素

      1)arrayObj.pop(); //移除最後一個元素並返回該元素值

      2)arrayObj.shift(); //移除最前一個元素並返回該元素值,數組中元素自動前移

      3)arrayObj.splice(deletePos,deleteCount); //刪除從指定位置deletePos開始的指定數量deleteCount的元素,返回所移除的元素

      4)delete array[property];//刪除指定位置的元素,若是刪除則返回true,不然返回false

總結:到底數組的是對象仍是對象是數組呢?說實話,兩者真的好像,我仍是有點贊同數組是對象一說,由於Java裏面是在這樣說的,一切萬物皆對象,估計也包括數組吧!然而,Javascript若是想要刪除數組中指定的元素,能夠是使用如上四種方法,前面兩種限制條件太多,不多使用,後面兩種的差別是,arrayObj.splice(deletePos,deleteCount);能夠刪除多個元素,並且是以刪除元素的數組形式返回,而delete array[property]只能一次性刪除一個元素,並且返回的是Boolean形式的值。固然兩者都是基於數組自身的操做,換句話會說:他們的操做會改變數組自己。另外,Java刪除集合中指定元素時,若是是在循環中刪除還要用迭代器,不然會報錯,而Javascript在循環中刪除是不會出現這種錯誤,因此循環中刪除也是沒問題的。

var array = new Array();
array[0] = {name:'k1',value:'dd'}
array[1] = {name:'k2',value:'dd'}
array[2] = {name:'k3',value:'dd'}
array[3] = {name:'k4',value:'dd'}
array[4] = {name:'k5',value:'dd'}
array[5] = {name:'k6',value:'dd'}

for(var i = 0 ; i < array.length ; i++){
  console.info(i);
  if( i == 2){
    var obj = array.splice(i,1); // 數組自帶刪除元素的方法,返回一個數組
    console.info(obj[0].name);
    //delete array[i]; 刪除對象屬性的方法,把數組當作一個對象,而後進行刪除屬性操做,返回一個Boolean值
  }
}

for(var obj in array){
  console.info(array[obj]);
}
相關文章
相關標籤/搜索