犀牛读书笔记--数组

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和getter

  var 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<len;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(st1<st2)return -1;
        return 0;
    })
    for(var i=0,len=str.length;i<len;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()
时间: 2024-09-28 04:18:51

犀牛读书笔记--数组的相关文章

11-2犀牛读书笔记

page128 6.4检测属性 javascript对象可以看作属性的集合,类似下面例子 var obj={ v:"变量", foo:function (){}, } 判断某个属性是否存在于对象中,可以用in运算符,hasOwnProperty()和propertyIsEnumerable()使用格式:"v" in obj;"foo" in obj; obj.hasOwnProperty("v");obj.hasOwnProp

《C++primer》v5 第3章 字符串、向量和数组 读书笔记 习题答案

3.1略 3.2 string str; //读行 while(getline(cin,str)) cout<<str<<endl; //读单个词 while(cin>>str) cout<<str<<endl; 3.3 输入运算符读到空白符结束 getline读到换行符结束,并丢弃换行符 3.4 比较大小. 比较大小是比较的第一个不相同的字符的大小. int main() { string a,b; cin>>a>>b;

PHP读书笔记(6)- 数组

数组定义 数组就是一个键值对组成的语言结构,键类似于酒店的房间号,值类似于酒店房间里存储的东西.PHP 中的数组实际上是一个有序映射.映射是一种把 values 关联到 keys 的类型. 定义数组 array() 可以用 array() 语言结构来新建一个数组.它接受任意数量用逗号分隔的 键(key) => 值(value)对. array( key => value , ... ) // 键(key)可是是一个整数 integer 或字符串 string // 值(value)可以是任意类

《C++ Primer 4th》读书笔记 第4章-数组和指针

原创文章,转载请注明出处: http://www.cnblogs.com/DayByDay/p/3911573.html <C++ Primer 4th>读书笔记 第4章-数组和指针

R读书笔记一:变量,向量,数组,矩阵,数据框,读写文件,控制流

R读书笔记一:变量,向量,数组,矩阵,数据框,读写文件,控制流 1.创建向量和矩阵 函数c( ), length( ), mode( ), rbind( ), cbind( ) 1)创建向量,求向量长度,向量类型. > x1=c(2,4,6,8,0) > x2=c(1,3,5,7,9) > length(x1) [1] 5 > mode(x1) [1] "numeric" > x1 [1] 2 4 6 8 0 > x1[3] [1] 6 > a

《C#图解教程》读书笔记之三:方法

本篇已收录至<C#图解教程>读书笔记目录贴,点击访问该目录可获取更多内容. 一.方法那些事儿 (1)方法的结构:方法头-指定方法的特征,方法体-可执行代码的语句序列: (2)方法的调用:参数.值参数.引用参数.输出参数.参数数组: ①参数: 形参-本地变量,声明在参数列表中:形参的值在代码开始之前被初始化: 实参-实参的值用于初始化形参: ②值参数: 为形参在栈上分配内存,将实参的值复制到形参: ③引用参数: 不为形参在栈上分配内存,形参的参数名作为实参变量的别名指向同一位置,必须使用ref关

Javascript读书笔记:函数定义和函数调用

定义函数 使用function关键字来定义函数,分为两种形式: 声明式函数定义: function add(m,n) { alert(m+n); } 这种方式等同于构造一个Function类的实例的方式: var add = new Function("m", "n", "alert(m+n);"); Function类构造方法的最后一个参数为函数体:"alert(m+n);",前面的都是函数的形参,参数必须是字符串形式的:&

【转】《windows核心编程》读书笔记

这篇笔记是我在读<Windows核心编程>第5版时做的记录和总结(部分章节是第4版的书),没有摘抄原句,包含了很多我个人的思考和对实现的推断,因此不少条款和Windows实际机制可能有出入,但应该是合理的.开头几章由于我追求简洁,往往是很多单独的字句,后面的内容更为连贯. 海量细节. 第1章    错误处理 1.         GetLastError返回的是最后的错误码,即更早的错误码可能被覆盖. 2.         GetLastError可能用于描述成功的原因(CreatEvent)

Linux内核架构读书笔记 - 2.5.2 数据结构

调度系统各个组建关系如下 激活调度器两种方法:进程睡眠或其他原因放弃CPU,周期性检测 上述两个组件统称为通用调度器或核心调度器. 调度器用于判断接下来运行那个进程,内核支持不同的调度策略( 完全公平调度 实时调度 无事可做的空闲调度进程) 调度器被调用时候 需要执行体系相关的进程上下文切换 每个进程属于某个调度器类,各个调度器负责管理所属进程,通用调度器不涉及进程管理,都由调度器来 下面分别讲述: task_struct 成员 sched.h 1 struct task_struct { 2