犀牛读书笔记--数组

page128 6.4检测属性javascript对象可以看作属性的集合,类似下面例子var obj={v:"变量",foo:function (){},}判断某个属性是否存在于对象中,可以用in运算符,hasOwnProperty()和propertyIsEnumerable()
使用格式:
"v" in obj;
"foo" in obj;obj.hasOwnProperty("v");
obj.hasOwnProperty("foo");propertyIsEnumerable()是hasOwnProperty()的增强版,只有检测到这个自有属性的可枚举性为true时才会返回true;page130 可枚举性for/in循环可以在循环体中遍历所有可枚举的属性(包括自有属性和继承的属性)
var obj={v:"变量",foo:function (){},}for(p in obj){console.log(p);}object.create(obj);用于创建一个继承至obj的对象page132 属性的setter和gettervar o={$x:"我是o",get getX(){return this.$x;},set setX(x){this.$x=x;}};调用时:console.log(o.getX);o.setX="new Obj";console.log(o.setX);6.7属性的特性对象的属性有四个特性:(1)值(2)可写性writeable(3)可枚举性(4)可配置性var txt=Object.getOwnPropertyDescriptor({x:1},"x");console.log(txt);上面语句可用于查询一个对象的某个属性(自有属性,访问不到继承属性)的四大特性。原型:通过字面量创建的对象采用 Object.prototype 作为原型通过new创建的对象采用构造函数的原型通过object.create()创建的对象使用第一个参数作为创建的对象的原型。序列化对象:str=JSON.stringify(o);p=JSON.prase(str);page144  数组数组的创建
a.直接使用方括号,数组可以存储不同类型的元素  
var empty=[];
var primes=[1,2,3,4,5];
var misc=[1,true,2,"a"]; b.数组直接量可以不为常数
var base=1024;
var arr=[base,base+1,base+2,base+3]c.数组可以包含数组or对象字面量
var foo=[[1,2,3],{x:1,y:2},[{foo:function...},{foo2:function...}]]d.利用Array构造函数创建,调用时可以有个数值参数,为数组的长度
var arr1=new Array();
var arr2=new Array(10);数组是对象的特殊形式,使用方括号访问数组元素就像用方括号访问对象的属性一样
对一个常规对象var o={};o[1]="one";数组就是将索引值变成字符串数组于常规对象的不同之处在于,使用2^32以内的非负整数作为属性名时,会自动维护其length的属性值事实上数组的索引与对象的属性名并无不同之处,所以数组的访问也不存在越界一说访问不存在的数组索引就像访问没定义的对象属性一样,返回undefined数组属性length的特殊行为
a=[1,2,3,4,5];
a.length=3;//此时数组中只存在[1,2,3]
a.length=0;//此时数组中不存在元素
a.length=5;//数组等价于new Array(5)
给数组的length赋值会改变数组的内容在E5中  可以让数组的length属性变为只读的
a=[1,2,3];
Object.defineProperty(a,"length",{writable:false});
这样数组的长度就不可以改变了
给一个定义了只读的数组push元素,程序会报错pop()对应push("param"),push在数组尾部加上"param"元素,而pop()则删除数组最后一个元素,并返回这个删除的元素
shift()于unshift(),shift用于删除数组的第一个元素,并将后面的元素索引往前移动。而unshift则添加参数。常用数组方法:
1.Array.join();将数组中所有元素转化成字符串并拼接在一起当其中有参数时,用参数字符串分割各元素;无参数时,默认为逗号:例如"1,2,3,4,5" "1-2-3-4-5"2.Array.reverse();将数组颠倒顺序3.Array.sort(function);排序,当没有参数时,以字母表顺序排序,undefined排在最后当要求以字母表顺序排序时,需指定一个比较函数传进sort()内;var a=[22,3,444,1111];a.sort();//字母表排序for(var i=0,len=a.length;i) console.log(a[i]);a.sort(function(a,b) {return b-a});//函数返回正值,b在a之前,返回负值,b在a只后
将字符串按忽略大小写的字母表排序var str=["ant","Bug","Dog","cat"];str.sort(function(s1,s2){st1=s1.toLowerCase();st2=s2.toLowerCase();if(st1>st2)return 1;if(st1return -1;return 0;})for(var i=0,len=str.length;i) console.log(str[i]);4.Array.contact()创建并返回一个新数组5.Array.slice()返回指定数组的子数组Array.splice()与slice功能相似,但是splice会修改母数组ECMA5中定义的数组方法:
1.forEach(function(v,i,arr){arr[i]=v+1;
});//回调函数读取v 元素值,i 元素索引,arr数组本身//模拟实现var o = {forEach: function (callback) {// alert(this.length);for (var i = 0, len = this.length; i < len; i++) {callback && callback(this[i], i, this);}},get length(){var sum=0;for(var n in this) {sum+=1;}return sum;}};Object.defineProperty(o,"length",{enumerable:false});Object.defineProperty(o,"forEach",{enumerable:false});/* 特别注意defineProperty和defineProperties的使用Object.defineProperties(o,{length:{enumerable:false},forEach:{enumerable:false}});*/o[0] = 0;o[1] = 1;o[2] = 2;o.forEach(function(v,i,arr){arr[i]=v+1;console.log(arr[i]+"callback");});2.map() 调用示例:a=[1,2,3];b=a.map(function(x){return x*x;});map返回一个数组,一个元素值在回调函数操作过后的数组//模拟实现map:function(callback){var temp=[];for (var i = 0, len = this.length; i < len; i++) {temp[i]=callback && callback(this[i]);}return temp;},3.    filter()every() some()数组对象的一些方法
isArray()

 

转载于:https://www.cnblogs.com/windSamW/p/4951452.html


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部