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]);
}
相关文章
相关标签/搜索