[Javascript 高级程序设计]学习心得记录7 引用类型(上)
来源:互联网 发布:工作记录软件 编辑:程序博客网 时间:2024/06/06 06:32
js引用类型的值(对象)是引用类型的实例,引用类型和类很像但是又不是同一个东西,引用类型被称为対象定义,描述一类对象所具有的属性和方法。
一,object类型
object类型是js基础原生类型,创建该类型实例有两种方法:new和对象字面量表示法。
var person = new Object(); // var person = {}; 一个效果 person.name = "Nicholas"; person.age = 29;
var person = { name : "Nicholas", age : 29 };对象字面量是向函数传递大量可选参数的首选方式。
访问也有两种方式:person.name和person['name']。建议使用后种,可以使用变量来访问属性。
二,Array类型
创建方式也有两种
var colors = new Array(3); //create an array with three items var names = new Array("Greg"); //create an array with one item, the string "Greg" alert(colors.length); alert(names.length);
var colors = ["red", "blue", "green"]; //creates an array with three strings var names = []; //creates an empty array var values = [1,2,]; //AVOID! Creates an array with 2 or 3 items var options = [,,,,,]; //AVOID! creates an array with 5 or 6 items alert(colors.length); //3 alert(names.length); //0 alert(values.length); //2 (FF, Safari, Opera) or 3 (IE) alert(options.length); //5 (FF, Safari, Opera) or 6 (IE)而array的方法也是特别特别多,这对我们处理数据提供了很大的方便。值得注意的一点是,length属性不是只读的,修改length属性可以修改数组长度。
1.检测数组方法
Array.isarray()方法。虽然instanceof()方法也可以,但是有不同执行环境下,可能存在不同的Array构造函数,这个具体会在后面提到。所以推荐使用isarray()方法
2.转换方法
所有对象都有的toLocaleString(),toString()和valueOf()方法就不说了。值得注意的是,alert()会自动调toString()方法。
有一个很实用的方法,join()。可以使用不同的分隔符来构建这个字符串。这个我在日常开发的时候经常用到,非常实用。
var colors = ["red", "green", "blue"]; alert(colors.join(",")); //red,green,blue alert(colors.join("||")); //red||green||blue3.栈和堆方法
push(),pop(),shift()三个方法,没什么特别的。主要是平时要记得灵活使用,很多时候都忘了这几个方法。
var colors = ["red", "blue"]; colors.push("brown"); //add another item colors[3] = "black"; //add an item alert(colors.length); //4 var item = colors.pop(); //get the last item alert(item); //"black"var item = colors.shift(); //get the first item alert(item); //"red" alert(colors.length); //14.重排序方法
有reverse ()翻转数组顺序的方法,还有sort()排序方法。值得注意的一点是,sort()方法可以加一个比较函数作为参数,这样可以自定义排序规则,其实在前面的心得3就是这个方法http://blog.csdn.net/m0_37645820/article/details/77867965,有兴趣可以看看,给对象数组排序。
function compare(value1, value2) { if (value1 < value2) { return 1; } else if (value1 > value2) { return -1; } else { return 0; } } var values = [0, 1, 5, 10, 15]; values.sort(compare); alert(values); //15,10,5,1,05.操作方法
主要有三个,concat()方法会创建一个当前数组的副本,然后将接收到的参数添加到这个副本的末尾,最后返回新构建的数组。和push()的区别就是,push操作的是数组的本体,而concat是构成一个新的数组,这点是值得注意的。
var colors = ["red", "green", "blue"]; var colors2 = colors.concat("yellow", ["black", "brown"]); alert(colors); //red,green,blue alert(colors2); //red,green,blue,yellow,black,brownslice()方法,可以基于当前数组中的一个或者多个项,创建一个新的数组。而不会影响原来的数组,和concat一样。
var colors = ["red", "green", "blue", "yellow", "purple"]; var colors2 = colors.slice(1); var colors3 = colors.slice(1,4); alert(colors2); //green,blue,yellow,purple alert(colors3); //green,blue,yellowsplice()方法是操作数组本体的,可以删除,插入和替换数组的元素。返回从原始数组中删除的项。
var colors = ["red", "green", "blue"]; var removed = colors.splice(0,1); //remove the first item alert(colors); //green,blue alert(removed); //red - one item array removed = colors.splice(1, 0, "yellow", "orange"); //insert two items at position 1 alert(colors); //green,yellow,orange,blue alert(removed); //empty array removed = colors.splice(1, 1, "red", "purple"); //insert two values, remove one alert(colors); //green,red,purple,orange,blue alert(removed); //yellow - one item array熟练掌握这三个方法和前面的栈堆方法,基本上就可以对数组为所欲为了。
6.位置方法
一个很简单而且实用的方法,indexOf(),返回查找值在数组中的位置,找不到返回-1。值得注意的是,是按全等匹配的。
var numbers = [1,2,3,4,5,4,3,2,1]; alert(numbers.indexOf(4)); //3 alert(numbers.lastIndexOf(4)); //5 alert(numbers.indexOf(4, 4)); //5 alert(numbers.lastIndexOf(4, 4)); //3 var person = { name: "Nicholas" }; var people = [{ name: "Nicholas" }]; var morePeople = [person]; alert(people.indexOf(person)); //-1 alert(morePeople.indexOf(person)); //07,迭代方法
js数组有5个迭代方法,接收两个参数:要在每一项运行的函数和运行该函数的作用域(可选)。传入的这个函数有三个参数:数组项的值(intem),该项在数组的位置(index)和数组(array)本身。
1、every(): 对数组中的每一项运行给定的函数,如果该函数对每一项都返回true,则结果返回true。
2、filter(): 对数组中的每一项运行给定函数,返回该函数会返回true的项组成的数组。
3、forEach(): 对数组中的每一项运行给定函数,这个方法没有返回值。
4、map(): 对数组中的每一项运行给定函数,返回每次函数调用的结果组成的数组。
5、some(): 对数组中的每一项运行给定函数,如果该函数任意一项返回true,则返回true。
根据应用场景,可以分为三种。
首先是检验用的every和some方法,every是数组每项都通过才返回true,some是只要有通过的就返回true。
var numbers = [1,2,3,4,5,4,3,2,1]; var everyResult = numbers.every(function(item, index, array){ return (item > 2); }); alert(everyResult); //false var someResult = numbers.some(function(item, index, array){ return (item > 2); }); alert(someResult); //true然后是筛选用的filter方法,返回通过的数组元素组成的数组。
var numbers = [1,2,3,4,5,4,3,2,1]; var filterResult = numbers.filter(function(item, index, array){ return (item > 2); }); alert(filterResult); //[3,4,5,4,3]最后是循环操作的方法,map和forEach。forEach和for循环的效果其实是一样的,没有返回值。
array.forEach(function(item, index, array)){ //执行某些操作 }而map的区别是,map是返回一个新的数组,不会影响原来的数组。
var numbers = [1,2,3,4,5,4,3,2,1]; var mapResult = numbers.map(function(item, index, array){ return item * 2; }); alert(mapResult); //[2,4,6,8,10,8,6,4,2]8. 归并方法
js数组提供了归并方法,reduce()。两个参数:一个在每一项上都调用的函数和作为归并基础的初始值(可选)。这个函数有四个参数:前一个值,当前值,项的索引和数组本身。所以归并实际上是从数组的第二项开始的。对于算累加,累乘等操作很方便。
var values = [1,2,3,4,5]; var sum = values.reduce(function(prev, cur, index, array){ return prev + cur; }); alert(sum);//15
后面还有RegExp类型,函数类型和基本包装类型,下次再写。
- [Javascript 高级程序设计]学习心得记录7 引用类型(上)
- [Javascript 高级程序设计]学习心得记录8 引用类型(下)
- [Javascript 高级程序设计]学习心得记录 函数参数传递与引用
- JavaScript高级程序设计3--引用类型(上)
- [Javascript 高级程序设计]学习心得记录4 基本包装类型
- JavaScript高级程序设计(引用类型)
- 《javascript高级程序设计》读书笔记(四)引用类型
- JavaScript高级程序设计3--引用类型(下)
- 《JavaScript高级程序设计》读书笔记(二):引用类型
- JavaScript高级程序设计笔记-引用类型
- 《JavaScript高级程序设计》读书笔记--5-引用类型
- [Javascript 高级程序设计]学习心得记录5 操作符和语句
- [Javascript 高级程序设计]学习心得记录6 变量和作用域
- [Javascript 高级程序设计]学习心得记录9 js面向对象
- [Javascript 高级程序设计]学习心得记录10 js函数表达式
- [Javascript 高级程序设计]学习心得记录11 js的BOM
- [Javascript 高级程序设计]学习心得记录12 DOM基础
- javascript 高级程序设计 第5章 引用类型 Object类型
- Kotlin学习教程(三)
- Java基本数据类型
- 如何解决Eureka Server不剔除已关停的节点的问题
- Ubuntu 加载本地磁盘Uable to access
- 单例模式
- [Javascript 高级程序设计]学习心得记录7 引用类型(上)
- hive DATEDIFF NULL
- 日期转成具体的几分钟前,几小时前等...
- dpkg命令学习
- Spring BeanPostProcessor接口的使用
- 浅谈安全漏洞--之越权
- HTTP请求错误
- 转载-个人看了网上很多String常量池的博客,这一篇写得最好
- 【arduino】KitteBlock自动避障小车