JavaScript高等程序设计-择要笔记-1

申明:

  1. 此择要笔记系列是我近来看《JavaScript高等程序设计(第3版)》顺手所记。

  2. 内里分条列举了一些我以为主要的、须要记下的、对我有协助的点,是根据我看的递次来的。

  3. 择要笔记自身没有系统性,没有全面性可言,写在这里供有肯定基本的前端开发者参考交换。

  4. 内里的知识点、例子大部份来源于本书,或许延长出来的,都经由我的测试是对的,然则没方法保证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() 的反操纵

第一部份完毕。

    原文作者:wfc_666
    原文地址: https://segmentfault.com/a/1190000007751297
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞