一、数据类型: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]); }