欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

javascript《权威指南》----部分总结

程序员文章站 2022-06-14 10:46:00
...

前记:

意识到还是对于 原生js 存在很多不了解,决定再次刷一遍《javascript权威指南》。

第六章:对象

对象作为js的基本数据结构类型。对象是一种复合值:它将很多值(原始值或者其他对象聚合在了一起)
我们可以把对象看成是从字符串到值的映射。
这种数据结构还有其他叫法,有些我们已经非常熟悉,比如:“散列” “散列表” “字典” “关联数组”

对象可以从一个称为原型的对象继承属性。对象的方法通常是继承的属性。这种“ 原型式继承 ” 是javascript的核心特征。JavaScript对象是动态的-----可以新增属性,也可以删除属性—但是他们常用来模拟静态对象一挤静态类型语言中的“结构体”。有时他们也用作字符串的集合。

对象最常见的用法是 创建(create) ,设置(set) ,查找(query) ,检测(test) ,删除(delete)和 枚举(enumerate)


Object.create()
用法:创建一个新对象,其中第一个参数是此对象的原型 ; 第二个参数是可选参数,用一堆对象的属性进行进一步描述.

Object.create()是一个静态函数,而不是提供给某个对象调用的方法.使用它的方法很简单,只需要传入所需的原型对象即可
var o1 = Object.create({x:1,y:2}); //o1继承了属性x和y


delete :使用 delete 删除属性

	var obj = {"author":"Lyn","age":23};
	delete obj.author	// obj---->{"age":23}

注意:不可以删除继承来的属性,如果想去除该属性,则需要从被继承者那里删除,但是所有继承者都会受到影响.


hasownproperty()、in和propertyIsEnumberable() 检测属性间的关系

	in 运算符左侧是属性名字,右侧是对象。如果对象的*属性或者继承属性中包含这个属性则返回true。
	var o= {x:1}
	"x" in o		//true
	"y" in o		//false
	"tostring" in o   //true: o 继承自tostring属性
	hasownproperty()	用于检测给定的名字是否是对象的自有属性。对于继承属性它将返回false:
	var o= {x:1}
	"x" in o		//true
	"y" in o		//false
	"tostring" in o   //false: o 继承自的,并非本身拥有的
propertyIsEnumberable() 是hasOwnProperty()的增强版,只有检测到是*属性且这个属性的可枚举性为true时才返回true

第七章 数组
forEach() 方法从头至尾遍历数组,传递的函数作为forEach()的第一个参数。然后forEach()使用三个参数调用该函数:数组的元素、元素的索引和数组本身

	var data = [1,2,3,4,5];		//数组求和
	var sum = 0;
	data.forEach((value)=>{sum +=value;})	//第1种
	console.log(data);			//15
	
	data.forEach((value,i,item)=>{item[i] = value+1})
	console.log(data);			//[2,3,4,5,6]
		

需要注意的是:foreach无法在所有元素遍历结束之前停止。如果非要终止,必须把forEach()方法放到一个try块中,并可以抛出一个异常。

map 方法

map方法将调用的数组的每个元素传递给指定的函数,并返回一个数组,它包含该函数的返回值。
map返回的不是源数组,而是一个新数组,如果源数组是一个稀疏数组,那么新数组也将会是一个稀疏数组

例如:

	a = [1,2,3];
	b = a.map((x)=>{x*x; });		// b是[1,4,9]

filter 方法

filter()方法返回的数组元素是调用的数组的一个子集。传递的函数是用来逻辑判定的:
该函数返回true或者false。调用判定函数就像调用foreach()和map()一样。如果返回的值为true或者能够转化成true的值,那么传递给判定函数的元素就是这个自己的成员,它将会被添加到一个座位返回值的数组中。
	a = [5,4,3,2,1];
	smallvalues = a.filter((x)=>{return x<3});		//[2,1]
	everyothernum = a.filter((x,i)=>{return i%2 == 0});	//[5,3,1]

虽然面对稀疏数组时,filter会返回的稀疏数组压成稠密数组。但在其他情况下,我们可以使用下面的方法压缩稀疏数组。

	var dense = sparse.filter(()=>{return true})

every()和some()
every()和some()方法是数组的逻辑判定:他们对数组元素应用指定的函数进行判断,返回true或者false

every 需要所有的元素通过判断,才能返回true,否则false 。类似于  &&
some 只要部分元素通过判断,就返回true,全部不通过才是false 。类似于 ||
	a = [1,2,3,4,5,22];
	a.every((x)=>{x<10})		//false
	a.some((x)=>{x<10})		//true

注意: 一旦every()和some()决定返回什么之的时候,就会停止遍历数组(短路

reduce()和reduceRight()

两个方法使用制定的函数将数组元素进行组合,生成单个值。这在函数式编程中是常见的操作,也可以称为"注入"和"折叠"。以下是代码:
	let a = [1,2,3,4,5]
	let sum = a.readuce((x,y)=>{return x+y},0)		//求和
	let produce= a.readuce((x,y)=>{return x*y},1)	//求积
	let max = a.reduce((x,y)=>{x>y?x:y})			//求最大值	
reduce()需要两个参数,第一个是函数,第二个是传给函数的初始值。

注意:reduce()函数和foreach()、map()等函数不同。比较熟悉的是,数组元素 、 元素的索引和数组本身将作为第2~4个参数传递给函数.第一个参数是目前为止的化简操作的累积。第一次调用函数时,第一个参数是一个初始值,他就是传递给reduce()的第二个参数。接下来,这个值就是上一次化简函数(第一个参数)的返回值。

reduceRight()的工作原理和reduce相同,不同的是它按照数组索引从高到低(自右往左运算)处理数组,而不是从左往右。

相关标签: js