JavaScript 常用基础知识

原创
2014/11/08 23:39
阅读数 224

1、数据类型:

    1)原始类型: String Boolean Number Null Undefiend

    2)引用类型:Object ..........

总结:为什么老生常谈数据类型呢?在开发中他们到底数据类型有什么指引,我从不纠结Null到底是Object类型还是Undefiend类型,没意义的东西不需要花费时间。但是,这里他告诉我们的是:原始类型永远是对象的拷贝,传值不传址;然而,引用类型则传的是引用,改变一个对象的引用会影响对象本身!所以,一定要记住5大原始数据类型。

/** 原始类型操作,传值不传址*/
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);

2、对象属性

    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 ; 如果我们不知道你们应该采用第二种。

var obj = new Object();
obj.name = 'maven';//必须符合变量的命名规范
obj[1] = 'git';//可以像数组一样建立索引,也就是一个属性
obj[{name:'svn'}]='cvs';// 可以传入任何变量
for (var attr in obj) {
  console.info(obj[attr]);
}

3、删除对象的属性

    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))

4、删除数组中指定的元素

      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]);
}






展开阅读全文
打赏
1
3 收藏
分享
加载中
更多评论
打赏
0 评论
3 收藏
1
分享
返回顶部
顶部