建议:在 javascript 中使用单引号表示字符串,在 html 中使用双引号表示字符串;
\n 换行符
\r 回车符
undefined null 0 -0 NaN "" 会转化为 false, 其他值转化为 true
字符串通过 new String() 构造函数创建一个临时对象,这个对象继承了字符串的方法,并被用来处理属性的引用,一旦引用结束,这个对象自动销毁。
数字和布尔值也具有各自的方法 Number() Boolean()
null 和 undefined 没有包装对象
在函数体内,局部变量的优先级高于同名的全局变量
严格模式和非严格模式之间的区别:
- var hasStrictMode = (fuction(){"use strict";return this === undefined}())
object.prototype 没有原型对象,它不继承任何属性,所有内置函数都继承自它
使用 Object.create() 创建一个新对象,其中第一个参数是这个对象的原型
- var o = Object.create(null); //o是一个没有原型的对象
当使用方括号 ([]) 运算符来获取属性的值时,方括号内的表达式必须返回字符串,或者是一个可以返回字符串的值
delete 运算符只能删除自有属性,不能删除继承属性。
delete 表达式删除成功后,返回 true
propertyIsEnumerable() 只有检测到是自有属性,且这个属性的可枚举性为 true 时才返回 true
对象继承的内置方法不可枚举,但在代码中给对象添加的属性都是可枚举的(除非将他们转换为不可枚举的)
ECMAScript5 定义了两个用以枚举属性名称的函数:
用 delete 删除数组元素与为其赋 undefined 值是类似的,注意:使用 delete 删除数组元素的时候不会修改数组的 length 属性
为了按照其他方式而非字符顺序进行数组排序,必须给 sort() 方法传递一个比较函数,该函数决定了它的两个参数在排好序的数组中的先后顺序。假设第一个参数在前,比较函数应该返回一个小于 0 的数,第一个参数在后,比较函数返回一个大于 0 的数
- var a = [1, 2, 3];
- b = a.map(function(x) {
- return x * x
- }); //b = [1,4,9]
- var a = [1, 2, 3, 4, 5];
- samllValue = a.filter(function(x) {
- return x < 3
- }); //[1,2]
一旦 every() 和 some() 确认返回什么值他们就会停止遍历数组元素
- var a = [1, 2, 3, 4, 5];
- a.every(function(x) {
- return x < 0
- }) //true
- a.every(function(x) {
- return x % 2 === 0
- }) //false
- a.some(function(x) {
- return x % 2 === 0
- }) //true
- a.some(isNaN) //false
reduce() 第一个参数执行化简操作的函数,该函数的 x 参数是数组的元素,y 参数是上一次操作的结果值,第二个参数是一个传递给函数的初始值,当没有初始值时默认为数组第一个元素
- var a = [1, 2, 3, 4, 5];
- var sum = a.reduce(function(x, y) {
- return x + y
- },
- 0); //15
- var max = a.reduce(function(x, y) {
- return (x > y) ? x: y;
- }) //5
javascript 数组的一些特性是其他对象所没有的:
要想以对象 o 的方法来调用 f 函数,可以这样使用:
- f.call(o) f.apply(o)
call() 和 apply() 的第一个实参是要调用函数的母体,在函数内通过 this 来获得它的引用
区别:
对 call() 来说,第一个实参之后的所有实参都是要传入待调用函数的值,所传入参数一一列出
apply() 第一个实参之后的参数可以以参数数组的形式传入
当在函数 f() 上调用 bind() 方法并传入一个对象 o 作为参数,这个方法将返回一个新函数。新函数将会把原始函数 f() 当做 o 的方法来调用,传入新函数的任何实参都将传入原始函数
- function f(y) {
- return this.x + y;
- }
- var o = {
- x: 1
- };
- var g = f.bind(o);
- g(2) //3
a instanceof b 本质是检测 a 对象是否继承自 b.prototype
一个正则表达式直接量会在执行到它时转化为一个正则对象,同一段代码每次运算都返回同一个对象
- ^ $. * +?=!:|\ / ()[] {}
在正则表达式中使用这些字符的直接量进行匹配,则必须使用前缀 \
将直接量字符单独放进方括号内就组成了字符类,一个字符类可以匹配它所包含的任意字符
- /[abc]/匹配a,
- b,
- c中任意一个 / [ ^ abc] / 匹配abc之外的所有字符 / [a - zA - Z0 - 9] / 匹配拉丁字母表中任何字母和数字 / [...] / 匹配方括号内任意字符 / [ ^ ...] / 匹配不在方括号内任意字符 / . / 匹配除换行符和其他Unicode行终止符之外的任意字符 / \w / 匹配任何ASCII字符组成的单词等价于 / [a - zA - Z0 - 9] / /\W/匹配任何不是ASCII字符组成的单词等价于 / [ ^ a - zA - Z0 - 9] / /\d/匹配任何ASCII数字等价于 / [0 - 9] / /\D/匹配除ASCII数字之外的任何字符等价于 / [ ^ 0 - 9] / /\s/匹配任何Unicode空白符 / \S / 匹配任何非Unicode空白符
正则表达式的重复字符语法
- {
- n,
- m
- }匹配前一项至少n次,但不能超过m次 {
- n,
- }匹配前一项n次或者更多 {
- n
- }匹配前一项n次 ? 匹配前一项0次或1次等价于 {
- 0,
- 1
- } + 匹配前一项1次或多次等价于 {
- 1,
- } * 匹配前一项0次或多次等价于 {
- 0,
- }
使用
,
- ?
时要注意,由于这些字符串可能匹配 0 个字符,因此他们允许什么都不匹配 非贪婪的重复 非贪婪的重复即尽可能少的匹配,只须在待匹配的字符后跟随一个问号即可
- *
字符 "|" 用于分隔供选择的字符
匹配的是三位数字或者四个小写字母 注意选择项的匹配次序是从左到右,直到发现匹配项,如果左边的选择项匹配,就忽略右边的匹配项
- /\d{3}|[a-z]{4}/
- | 匹配的是该表达式左边或右边的子表达式 (...)将几个项组合为一个单元,这个单元可通过" * "," + ","?"和" | "等符号加以修饰,而且可以记住和这个组合相匹配的字符串以供此后的引用使用 ( ? ...)只组合,把项组合带一个单元,但不记忆与该组相匹配的字符\n和第n个分组第一次匹配的字符相匹配,组是圆括号中的子表达式
- ^ 匹配字符串的开头,在多行检索中匹配一行的开头$匹配字符串的结尾,在多行检索中匹配一行的结尾\b匹配一个单词的边界,简言之就是位于字符\w和\W之间的位置,或位于字符\W和字符串的开头或者结尾之间的位置\B匹配非单词边界的位置 ( ? =p)零宽正向先行断言,要求接下来的字符都与p匹配,但不包括匹配p的那些字符 ( ? =p)零宽负向先行断言,要求接下来的字符都不与p匹配
search() 返回第一个与之匹配的子串的起始位置,如果找不到匹配则返回 - 1。该方法不支持全局检索
- "javascript".search(/script/i); //4
replace() 用于检索与替换操作
第一个参数是一个正则表达式,第二个参数是要进行替换的字符串。如正则表达式不带修饰符 g,则只替换所匹配的第一个子串
- text.replace(/javascript/gi, "JavaScript");
- var quote = /"([^"]*)"/g;
- text.replace(quote, '"$1"');
match(正则表达式) 返回的是一个由匹配结果组成的数组
- "1 plus 2 euqals 3".match(/\d+/g); //["1", "2", "3"]
split() 这个方法用以将调用它的字符串拆分为一个子串组成的数组
- "1, 2, 3, 4".split(/\s*,\s*/); //["1","2","3","4"]
来源: http://www.cnblogs.com/jesse131/p/5986764.html