申明:
此择要笔记系列是我近来看《JavaScript高等程序设计(第3版)》顺手所记。
内里分条列举了一些我以为主要的、须要记下的、对我有协助的点,是根据我看的递次来的。
择要笔记自身没有系统性,没有全面性可言,写在这里供有肯定基本的前端开发者参考交换。
内里的知识点、例子大部份来源于本书,或许延长出来的,都经由我的测试是对的,然则没方法保证100%准确,假如有人看到毛病的处所,愿望指出来,感谢。
正文:
1、数组检测要领:
1. value instanceof Array // true / false
2. Array.isArray(value) // true / false, 支撑的浏览器 IE 9+,Firefox 4+, Safari 5+, Opera 10.5+, Chrome
2、栈和行列
栈是一种 LIFO(Last-In-First-Out后进先出) 的数据结构。在数组中表现为 push() pop() 要领
行列数据结构的接见划定规矩是 FIFO(First-In-First-Out) ,在数组中表现为 push() shift() 要领
3、数组的 sort() 会对每一项挪用 toString() 要领,所所以根据字符串来排序的,可以传一个函数作为参数来处置惩罚这个题目,以下:
function compare (value1, value2) {
if (value1 < value2) {
return -1
} else if (value1 > value2) {
return 1
} else {
return 0
}
}
或许
function compare (value1, value2) {
return value1 - value2
}
values.sort(compare)
获得从小到大的升序分列
4、数组的 slice() 要领,假如参数中有负数,则用数组长度加上该数来肯定响应的位置,假如完毕位置小于肇端位置,则返回空数组
数组的 splice() 要领始终会返回一个数组
5、数组的 indexOf() lastIndexOf() 要领采纳全等要领来查找项,返回查找到的项的索引,假如找不到返回 -1
// 支撑的浏览器 IE 9+,Firefox 2+, Safari 3+, Opera 9.5+, Chrome
6、数组的迭代要领总结:
每一个要领都接收两个参数, 1. 在每一项上运转的函数,2. 运转该函数的作用域对象——影响 this 的值(可选)
传入的函数会接收三个参数,数组项的值、索引、该数组
1. every() // 对每一项运转给定函数,假如每一项都返回true,则返回true。
2. filter() // 对每一项运转给定函数,返回该函数会返回true的项构成的数组。
3. forEach() // 对每一项运转给定函数,没有返回值。
4. map() // 对每一项运转给定函数,返回每一项挪用的效果构成的数组。
5. some() // 对每一项运转给定函数,假如有一项返回true,则返回true。
// 支撑的浏览器 IE 9+,Firefox 2+, Safari 3+, Opera 9.5+, Chrome
7、合并要领 reduce() reduceRight() // reduce()是从头部最先遍历,reduceRight()是从尾部最先遍历,别的都一样
// 这两个要领都接收两个参数,一个是在每一项上挪用的函数,一个是作为合并基本的初始值(可选),
// 传入的函数接收四个参数,前一个值、当前值、索引、数组对象,这个函数返回的任何值都邑作为第一个参数传给下一项
// 注重:假如通报了第二个参数,即合并的初始值,那末函数会从数组第一项最先遍历,假如不传则把第一项作为初始值直接从第二项最先遍历
8、关于函数
函数实际上是对象,所以每一个函数都是Function范例的实例,而且和别的援用范例一样具有属性和要领。
因为函数是对象,因而函数名实际上是指向一个函数对象的指针,不会与某个函数绑定。
9.函数两种定义体式格局:
区分在于函数声明提拔。
a.函数声明:
function sum (n1, n2) {
return n1 + n2
}
b.函数表达式:
var sum = function (n1, n2) {
return n1 + n2
}
10.函数可以作为参数传给另一个函数,可以从一个函数中返回另一个函数,如:
function createComparisonFunction (propertyName) {
return function (obj1, obj2) {
var value1 = obj1[propertyName]
var value2 = obj2[propertyName]
if (value1 < value2) {
return -1
} else if (value1 > value2) {
return 1
} else {
return 0
}
}
}
var data = [{
name: 'ZhangSan',
age: 18
}, {
name: 'Nicholas',
age: 19
}]
data.sort(createComparisonFunction('name'))
11. 函数内部属性
在函数内部有两个特别对象, arguments、this。
arguments 有一个名叫 callee 的属性,是一个指针,指向具有这个 arguments 对象的函数,
运用以下:
求阶乘:
function factorial (n) {
if (n <= 1) {
return 1
} else {
return n * arguments.callee(n - 1)
}
}
this 指实行这个函数的环境对象
es5 范例化了另一个函数对象的属性 caller,这个属性保留着挪用当前函数的函数的援用,假如在全局作用域中则为null,如:
function outer () {
inner()
}
function inner () {
alert(inner.caller) // 显现 outer 函数的源代码
}
或许:
function outer () {
inner()
}
function inner () {
alert(arguments.callee.caller) // 显现 outer 函数的源代码
}
12. 函数的属性和要领
每一个函数都包含两个属性,length和prototype。
length示意函数愿望接收的参数的个数,prototype是保留一切实例要领的真正地点
每一个函数都包含两个非继续过来的要领,call()和apply(),作用都是在特定的作用域中挪用函数,实际上即是设置函数体内this指针的值
apply() 接收两个参数,一个是在个中运转的作用域,一个是包含一切参数的数组,可以是 Array 的实例,也可以是 arguments 对象
call() 第一个参数同 apply(), 以后把一切参数直接通报给函数,如:
window.color = 'red'
var o = {
color: 'blue'
}
function sayColor () {
alert(this.color)
}
sayColor() // 'red'
sayColor.call(this) // 'red'
sayColor.call(window) // 'red'
sayColor.call(o) // 'blue'
es5 定义了 bind() 要领,这个要领会建立一个函数的实例,其this值会被绑定到传给 bind() 函数的值,如:
window.color = 'red'
var o = {
color: 'blue'
}
function sayColor () {
alert(this.color)
}
var objSayColor = sayColor.bind(o)
objSayColor() // 'blue'
// 支撑的浏览器 IE 9+,Firefox 4+, Safari 5.1+, Opera 12+, Chrome
13. num.toString(n) // 该要领返回几进制数值的字符串情势,如:
var num = 10
num.toString() // '10'
num.toString(10) // '10'
num.toString(2) // '1010'
num.toString(8) // '12'
num.toString(16) // 'a'
num.toFix(n) // 该要领将根据指定的小数位返回数值的字符串示意,如:
var num = 10
num.toFix(2) // '10.00'
// 假如数值自身比指定的小数位多,在当代浏览器上则根据四舍五入的方法来处置惩罚
num.toExponential(n) // 示意用指数示意法(也称e示意法)来把数值按指定的位数来转化成字符串情势,如:
var num2 = 10.1234
num2.toExponential(4) // '1.0123e+1'
14. String 范例的每一个实例都有 length 属性,注重,纵然有双字节字符,每一个字符也只算一个字符,计算长度的时刻算1,如:
var str = '哈哈'
str.length // 2
15. 字符要领:charAt() charCodeAt() // 这两个要领都接收一个基于0的字符位置的参数,前者返回对应字符,后者返回对应字符的字符编码,如:
var stringValue = 'hello world'
stringValue.charAt(1) // 'e'
stringValue.charCodeAt() // 101 // 数值范例
// es5 定义了 方括号加数字索引来接见特定字符的要领,如:
stringValue[1] // 'e'
// 支撑的浏览器 IE 8+,Firefox , Safari , Opera , Chrome
16. 字符串操纵要领
str.concat() // 类似于 + 号拼接字符串,可以通报多个参数,返回新的把str和一切参数拼接在一起的字符串
slice() substring() substr() // 这三个都是会返回被操纵字符串经由支解获得的新字符串,接收一个或两个参数,第一个参数指定支解最先位置,
// slice() substring() 的第二个参数指定支解完毕位置,不包含该位置的字符串,substr() 第二个参数指返回的字符个数。
// 假如没有给定第二个参数,则将字符串的长度作为完毕位置,如:
var stringValue = 'hello world!'
stringValue.slice(3) // 'lo world!'
stringValue.substring(3) // 'lo world!'
stringValue.substr(3) // 'lo world!'
stringValue.slice(3, 7) // 'lo wo'
stringValue.substring(3, 7) // 'lo wo'
stringValue.substr(3, 7) // 'lo worl'
// 假如传入的参数为负值,三个要领处置惩罚状况不相同:slice() 把两个负参数都跟字符串长度相加,substring() 把两个负参数都转化成0,
// substr() 把第一个参数跟字符串长度相加,第二个参数转化成0
17. 字符串位置要领:indexOf() lastIndexOf() // 这两个要领都是从一个字符串中搜刮给定的子字符串,然后返回子字符串的位置(没找到,则返回 -1)
// 这两个要领的区分在于,一个夙昔向后搜刮子字符串,一个从后向前搜刮子字符串,如:
var stringValue = 'hello world'
stringValue.indexOf('o') // 4
stringValue.lastIndexOf('o') // 7
// 这两个要领都可以接收第二个参数,示意从字符串中的哪一个位置最先搜刮,包含指定的位置,如以下要领经由过程轮回挪用找到一切婚配的子字符串:
function getAllStr (str1, str2) {
var positions = []
var pos = str1.indexOf(str2)
while (pos > -1) {
positions.push(pos)
pos = str1.indexOf(str2, pos + 1)
}
return positions
}
18. trim() // es5 定义了这个要领,会返回一个删除了前置及后缀的一切空格的新字符串,如:
var stringValue = ' abc '
stringValue.trim() // 'abc'
// 支撑的浏览器 IE 9+,Firefox 3.5+, Safari 5+, Opera 10.5+, Chrome
// 另外 Firefox 3.5+, Safari 5+ Chrome 8+ 还支撑非标准的 trimLeft() trimRight() 要领,离别用来删除字符串开首和末端的空格
19. 字符串大小写转换要领
toLowerCase() toLocaleLowerCase() toUpperCase() toLocaleUpperCase()
toLocaleLowerCase() toLocaleUpperCase() // 为对少数言语运用的特别划定规矩
var stringValue = 'Hello World!'
stringValue.toLowerCase() // 'hello world!'
stringValue.toUpperCase() // 'HELLO WORLD!'
20. 字符串的形式婚配要领
这一部份稍后增加上去?
21. URI 编码要领 encodeURI() encodeURIComponent() 对应 decodeURI() decodeURIComponent()
编码要领可以对 URI(Uniform Resource Identifiers 通用资本标识符) 举行编码,以便发送给浏览器。有用的 URI 不能包含某些字符,如空格。
它们用特别的 UTF-8 编码替代一切无效字符,从而让浏览器可以接收和明白。
区分是 encodeURI() 不会对自身属于 URI 的特别字符举行编码,比方冒号、正斜杠、问号、井号;而 encodeURIComponent()
会对它发明的一切非标准字符举行编码。
decodeURI() 是 encodeURI() 的反操纵
decodeURIComponent() 是 encodeURIComponent() 的反操纵
第一部份完毕。