文档章节

JavaScript 常用基础知识

learn_more
 learn_more
发布于 2014/11/08 23:39
字数 1531
阅读 90
收藏 4

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






© 著作权归作者所有

learn_more
粉丝 94
博文 240
码字总数 210196
作品 0
深圳
程序员
私信 提问
学习 React 前你需要知道些什么

如果你正在看这篇文章,你很可能已经知道 React 是啥了。React 的学习曲线陡峭是众所周知的,很多人在开始学习 React 时都一头雾水,笔者自然也不例外。究其原因,是因为我们在学习 React 的...

Hopsken
01/16
0
0
学习Javascript的8张思维导图

分别归类为:  javascript变量  javascript运算符  javascript数组  javascript流程语句  javascript字符串函数  javascript函数基础  javascript基础DOM操作  javascript正则表达式...

thinkyoung
2014/09/23
0
0
浅谈零基础新手学HTML5前端开发学习路线

  浅谈HTML5前端开发学习路线。学习HTML5开发先学学HTML、CSS3、JS这些基本的知识,HTML5学习入门的内容基本差不多,但是学习的成果却千差万别,这就是所谓的基础,所谓万丈高楼平地起,地...

Java编程语言基础入门博客
2017/04/04
0
0
前端基础-JavaScript

开发工具与关键技术:DW/浏览器 ;简单使用js。 作者:刘佳明 撰写时间:2019年1月 18 日 前面已经随手写过了关于网页编辑的一些基础布局和标签的认识;这篇文章在这里为大家简单的介绍一下关...

没有,
01/18
0
0
如何轻松快速学习JavaScript 呢?

JS给人那种感觉的原因多半是因为它如下的特点: 1:本身知识很抽象、晦涩难懂,如:闭包、内置对象、DOM。 2:本身内容很多,如函数库,对象库就一大堆。 3:混合多种编程思想。 4:辛苦学习...

课工场CC老师
2017/11/04
0
0

没有更多内容

加载失败,请刷新页面

加载更多

Jenkins基础入门-5-用户和权限管理

本篇,我们来介绍下Jenkins上如何创建用户,以及如何管理用户,和那些用户可以有ProjectA的权限。这个很好理解,一个项目,有开发和测试,和运维,每个团队都有不同的角色,例如有测试经理和...

shzwork
8分钟前
0
0
linux上解压版安装jdk,tomcat

需要的安装包 1.vmware12 2.centos7版本 3.安装完成后需要xshell来连接远程虚拟机,虚拟机保证要联网,网络畅通。 4.xftp用来向linux传输文件用,一般来说xshell和xftp配套使用 5.对应的压缩...

architect刘源源
44分钟前
24
0
使用 spring 的 IOC 解决程序耦合

工厂模式解耦 在实际开发中我们可以把三层的对象都使用配置文件配置起来,当启动服务器应用加载的时候,让一个类中的方法通过读取配置文件,把这些对象创建出来并存起来。在接下来的使用的时...

骚年锦时
今天
2
0
group by分组后获得每组中时间最大的那条记录

用途: GROUP BY 语句用于 对一个或多个列对结果集进行分组。 例子: 原表: 现在,我们希望根据USER_ID 字段进行分组,那么,可使用 GROUP BY 语句。 我们使用下列 SQL 语句: SELECT ID,US...

豆花饭烧土豆
今天
3
0
android6.0源码分析之Camera API2.0下的Preview(预览)流程分析

本文将基于android6.0的源码,对Camera API2.0下Camera的preview的流程进行分析。在文章android6.0源码分析之Camera API2.0下的初始化流程分析中,已经对Camera2内置应用的Open即初始化流程进...

天王盖地虎626
今天
4
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部