11-2犀牛读书笔记

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-10-16 21:35:34

11-2犀牛读书笔记的相关文章

犀牛读书笔记--数组

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

读书笔记:C++ Primer系列(11)—— 表达式

定义: 表达式(expression)是由一个或多个操作数(operand)通过操作符(operator)组合而成. 1. 操作符--除法(/)和求模(%) 注意: 除法和求模两种运算,操作数都必须是整型,包括:bool.char.short.int和long类型,以及对应的unsigned类型 如果两个操作数为正,除法和求模操作的结果也是正数或为零: 如果两个操作数为负,除法操作的结果为正数或为零,而求模的结果为负数或为零: 如果两个操作数,一个为正一个为负,除法和求模的结果取决于机器:如果求

《TCP/IP详解卷1:协议》第11章 UDP:用户数据报协议-读书笔记

章节回顾: <TCP/IP详解卷1:协议>第1章 概述-读书笔记 <TCP/IP详解卷1:协议>第2章 链路层-读书笔记 <TCP/IP详解卷1:协议>第3章 IP:网际协议(1)-读书笔记 <TCP/IP详解卷1:协议>第3章 IP:网际协议(2)-读书笔记 <TCP/IP详解卷1:协议>第4章 ARP:地址解析协议-读书笔记 <TCP/IP详解卷1:协议>第5章 RARP:逆地址解析协议-读书笔记 <TCP/IP详解卷1:协

C++ 11新特性解析——《深入理解C++ 11:C++11新特性解析和应用》读书笔记

因为偶然的机会,在图书馆看到<深入理解C++ 11:C++11新特性解析和应用>这本书,大致扫下,受益匪浅,就果断借出来,对于其中的部分内容进行详读并亲自编程测试相关代码,也就有了整理写出这篇读书笔记的基础.C++作为踏入编程的最初语言,一直充满感情,而C++11作为新标准虽然推出一段时间了,却因为总总原因直到现在才去开始真正了解,不过一句话回荡在脑中:当你认为为时已晚的时候,恰恰是最早的时候!从C++98到C++11, C++11标准经历了10几年的沉淀,以全新的姿态迎接新的挑战,长话短说,

《浪潮之巅》读书笔记——第11章 摩托罗拉

第11章 摩托罗拉  公司发展    1928创立 原名高尔文制造公司    基因      注重技术和品质    1947 改名摩托罗拉    2011 拆分为摩托罗拉移动和摩托罗拉解决方案两个独立上市公司    2011 Google收购摩托罗拉移动 获得大量专利 扭转了苹果和微软的专利战  产品    最早是做汽车收音机 Motorola是其品牌    给军方做便携式无线通信工具 步话机二战前    模拟无线通信的老大(无线双工霸主)    1946 汽车电话    1958 汽车对讲机 

uml精粹——11.活动图(及整个读书笔记分享)

11.活动图activity diagram 活动图是描述过程化逻辑procedural logic.业务过程business process和工作流work flow的技术.他和流程图flowchart类似,但不同是他们支持并行行为parallel bahavior. 见图11.1 我们从初始节点initial node动作开始,然后做Receive Order的动作.完成后遇到一个fork分叉.一个分叉fork有一个收入流incoming flow和一些外出的并行流outgoing conc

&lt;&lt;UML for Java Programmers&gt;&gt; 第11章读书笔记

这一章提到新手做设计时的常见错误. 我最喜欢这一章,以前看的时候,为了追求所谓的速度,把书中的实例统统略过,真有点买椟还珠的味道.另外说明一下,读书笔记为什么突然跳到第11章. 最简单的原因是因为我对这一章有感觉,觉得有必要做笔记. 常见的如下: 1. 没有方法的类(MissingMethods).没有方法的类是没有存在价值的,"programs are about behavior!",我们应该根据行为来划分软件系统.如果不是根据行为来划分软件,说明用了其它错误的划分方法. 2. 真

MySQL Cookbook第11章读书笔记

1,创建一个序列列兵生成序列值 使用auto_increment 如果显式地把ID设置成一个非NULL的值,有两个结果: a,这个值在表中出现,由于id列是主键,因而不允许重复,故会出现错误 b,这个值没有出现例如,你的表中id序列值为1到8,此时你插入一个新航,并设置为20,那么下一个自动产生的序列就会从21开始,而9-19的值变得不可用. 2,序列生成的行删除的效果 例如在insect表中: 比如要求只能是昆虫,删除millipede,millbug,多余的蚂蚁 删除2会给序列中间带来一个缺

《自动化技术中的进给电气传动》读书笔记1.1-1.2

读书笔记 1.1 在本节内容中,主要介绍了一些专用术语与概念性的知识. 重点: (1)调节回路信号 一个起模拟作用的传递环节或系统的特征是:通过一个模拟输出信号来再现一个模拟输入信号.在这种情况下,两信号之间必须不存在线性关系. 问题:为什么必须不存在线性关系? 二进制数的传输和处理可以采用并行与串行的方式 (2)采样 数字信号的采样会使得采样信号所包含的信息比原始数字信号所包含的信息少,采样周期的大小会影响畸变.(主要原因是存储器的工作方式,存储环节会在采样周期内给输出端赋予在该采样周期开始时