知识点
-
List item
-
if语句后面没有大括号时则只执行一条语句
-
等号的作用:
=:赋值表达式
==:相等运算符
===:严格相等运算符 -
空数组[ ]和空对象{ }对应的布尔值都是true
-
javascript内部,所有数字都是以64位浮点数存储,所以javascript的底层根本没有整数
-
+0和-0在大部分场合都是相等的 只有作分母时是不一样的 (1/+0===1/-0) 返回false 因为0不能作分母
1/+0 返回 Infinity 1/-0 返回 -Infinity -
NaN 表示 “非数字” 数据类型属于Number NaN不等于任何值,也不等于它本身
NaN 与任何数的运算都等于NaN 包括它本身 是唯一不等于自身的值
任何数值与NaN比较都返回false -
Infinity大于一切数值 除了NaN -Infinity小于一切数值 除了NaN
Infinity 与NaN比较总是返回false -
parseInt : 将字符串转为整数,它的转换方法是 一个个字符依次转换,当遇到不能
转换的字符时则停止转换 返回已经转好的部分
parseInt 的第二个参数可以帮助进行进制之间的转换。 -
单引号内部需要使用单引号时,要在单引号前面加反斜杠\ 双引号内部要使用双引号也是一样
-
三种函数声明方式:
直接声明函数 function 函数名(){ }
使用构造函数 var 函数名=new function(){ }
函数表达式 var 函数名= function(){ }; -
函数的 length 属性返回函数定义时传入的参数的个数
-
函数执行时所在的作用域 是定义时的作用域 不是调用(运行)时的作用域
-
函数的参数如果有两个相同的值,那么总是会去后面的那个,即使是后面那个参数未定义或为空。
比如:
-
arguments对象只有在函数内部才可以使用 arguments对象虽然很像数组,但它是一个对象,数组的方法它不能直接使用
-
将arguments对象转为数组的方法:
-
清空数组的一个简单方法:将数组的length设为0
-
Math.abs(); 计算一个值的绝对值。 Math.abs(-1); // 1
-
比较运算符可以比较各种类型的值,不只是数值
-
+0===-0 //返回 true
-
严格相等运算符有一个对应的严格不相等运算符(!==),它的算法是先求严格相等运算符的结果,然后返回相反值,如下:
-
两次取反是将一个数转为布尔值的简便写法
-
位运算符只对整数有效,当遇到小数时会自动去除小数部分,所以 一个小数与0进行二进制或运算 相当于给这个小数取整 (但是不合适超过32位整数最大值2147483647)
-
二进制否运算符巧记:一个数与自身的取反值相加等于-1 alert(~-4) //3
对一个小数进行两次二进制否运算,相当于给这个小数取整,因为所有的位运算只对整数有效,小数会自动去除小数部分。这是所有取整方法中最快的一种 -
逗号运算符,对两个表达式求值并返回后一个表达式的值
上面表达式先执行逗号之前的操作,然后返回逗号后面的值。 -
js的数据类型分为原始类型和引用类型
原始类型包括(undefined、number、boolean、String、null
引用类型:Object
使用typeof 检查null的数据类型,结果会返回 object (历史原因) -
只使用严格相等运算符(===)
-
console.log方法支持以下占位符,不同类型的数据必须使用对应的占位符
%s 字符串
%d 整数
%i 整数
%f 浮点数
%o 对象的链接
%c CSS格式字符串 -
关于Object.keys()和Object.getOwnPropertyNames()方法:
他们的参数都是对象,返回的都是数组(返回对象的所有属性名)
不同的是,Object.keys()只能返回可枚举的属性(不可遍历的属性也不能返回),
Object.getOwnPropertyNames()还可以返回不可枚举的属性
这两个方法还可以用于输出对象的属性的个数 因为 javascript 没有提供计算对象属性 个数的方法,所以用这个两个替代
-
其他方法:
Objest.getOwnPropertyDescriptor()只能用于对象自身的属性,不能用于继承的属性。 -
使用 typeof 判断数组 会返回 “Object” 所以当我们需要判断一个值是否为数组时,应该使用 Array 的 isArray() 可以识别数组。
-
数组的push和pop方法:
数组的push方法给数组增添成员,返回添加新元素后的数组长度
数组的pop方法 删除数组的末尾值,返回删除的元素
数组的shift和unshift方法:
数组的shift方法删除数组的第一个元素,返回删除的元素
数组的unshift方法在数组的第一个位置添加元素并返回添加元素后的数组长度
这四个方法都会改变原数组 -
可以在原型对象的prototype上面自定义方法和属性,供原始类型的值直接调用
-
javascript的三个包装对象:Number、boolean、String
-
toString方法只能将十进制的数转换为其他进制,如果要将其他进制转为十进制,要使用parseInt方法
-
toFixed方法现将一个数转为指定位数(小数部分的个数)的小数,然后返回这个小数对应的字符串,参数为小数位数,有效范围是0—20,超出范围抛出RangeError 错误
-
toExponential 方法是将一个数转换成科学计数法的形式,参数是小数点后有效数字的位数,有效范围是0—20,超出范围抛出RangeError 错误
-
toPrecision方法用于将一个数转为指定位数的有效数字(这个数整数部分和小数部分总的个数),参数为有效数字的位数,有效范围1—21,超出范围抛出RangeError 错误,toPrecision 方法用于四舍五入不可靠,跟浮点数不是精确存储有关。
-
String的静态方法(定义在对象本身,而不是定义在对象实例中的方法)
String.fromCharCode(),参数是一个或多个值,代表Unicode码点,返回值是这些码点组成的字符串,不支持码点数大于 0xFFFF(十进制的65535) 的字符 -
Math对象的静态属性 (这些属性都是只读的不能修改)
Math.E 常数e
Math.LN2 2的自然对数
Math.LN10 10的自然对数
Math.LN2E 以2为底e的对数
Math.10E 以10为底e的对数
Math.PI 常数π
Math.SQRT1_2 0.5的平方根
Math.SQRT2 2的平方根 -
Math对象的静态方法
Math.abs() 绝对值
Math.ceil() 向上取整
Math.floor() 向下取整
Math.max() 最大值
Math.min() 最小值
Math.pow() 两个参数,指数运算
Math.sqrt() 平方根,负数返回NaN
Math.log() 自然对数 返回以e为底的自然对数值
Math.exp() e的指数
Math.round() 四舍五入
Math.random() 随机数 返回0—1之间的伪随机数,可能等于0,但一定小于1 -
Math对象的三角函数方法
Math.sin() 返回参数的正弦(参数为弧度值)
Math.cos() 返回参数的余弦(参数为弧度值)
Math.tan() 返回参数的正切(参数为弧度值)
Math.asin() 返回参数的反正弦(返回值为弧度值)
Math.acos() 返回参数的反余弦(返回值为弧度值)
Math.atan() 返回参数的反正切(返回值为弧度值)
RegExp
新建正则表达式:
使用字面量:正则表达式以斜杠“/”表示开始和结束 var reg=/xyz/;
使用RegExp构造函数:var reg=new RegExp(‘xyz’);
他们是等价的
RegExp构造函数还可以有第二个参数,表示修饰符
正则表达式的实例属性
1、修饰符相关
RegExp.prototype.ignoreCase:返回一个布尔值,表示是否设置了i修饰符(只读)
RegExp.prototype.global:返回一个布尔值,表示是否设置了g修饰符(只读)
RegExp.prototype.multiline:返回一个布尔值,表示是否设置了m修饰符(只读)
RegExp.prototype.flags:返回一个字符串,包含了已经设置的所有修饰符,按字母排序。(只读)
2、其他实例属性
RegExp.prototype.lastIndex:返回一个整数,表示下一次开始搜索的位置(可读写)
RegExp.prototype.source: 返回正则表达式的字符串形式,不包括反斜杠 (只读)
正则表达式的实例方法
RegExp.prototype.test()方法,返回一个布尔值,表示当前模式是否能匹配参数字符串,若正则表达式带有g修饰符,则每一次test方法都从上一次结束位置开始向后匹配
RegExp.prototype.exec()方法,用来返回匹配结果,如果发现匹配就返回一个数组,成员就是匹配成功的子字符串,否则返回null。
若正则表达式中包含圆括号,则返回的数组会包含多个成员,第一个成员是整个匹配的结果,后面的成员就是圆括号对应的匹配成功的组
exec()方法的返回数组具有两个属性:
input:整个字符串
index:整个模式匹配成功的开始位置。
匹配规则
字面量字符和元字符
字面量就是可以直接看出来的
元字符:
(1)点字符,匹配除回车(\r)、换行(\n)、行分隔符(\u2028)和段分隔符(\u2029)以外的所有字符。比如/c.t/匹配c与t之间包含任意一个字符的情况(不包括换行符 \n),可以是c1t、cbt,但不能是caat。
(2)位置字符:用来提示字符所处的位置,^表示字符开始位置,$表示字符结束位置
(3)选择符(|): 在正则表达中表示或关系
(4)\ * + ? () [ ] { }
转义符
正则表达式中,那些有特殊含义的元字符,若要匹配他们本身,就需要在他们前面加上反斜杠“ \ ” 比如要匹配+ 就要写成" + "
正则表达式中,需要转义的有12个字符:^、.、[、$、(、)、|、*、+、?、{和\。需要特别注意的是,如果使用RegExp方法生成正则对象,转义需要使用两个斜杠,因为字符串内部会先转义一次。
特殊字符
\cX 表示Ctrl-[X],其中的X是A-Z之中任一个英文字母,用来匹配控制字符。
[\b] 匹配退格键(U+0008),不要与\b混淆。
\n 匹配换行键。
\r 匹配回车键。
\t 匹配制表符 tab(U+0009)。
\v 匹配垂直制表符(U+000B)。
\f 匹配换页符(U+000C)。
\0 匹配null字符(U+0000)。
\xhh 匹配一个以两位十六进制数(\x00-\xFF)表示的字符。
\uhhhh 匹配一个以四位十六进制数(\u0000-\uFFFF)表示的 Unicode 字符
字符类
表示与一系列放在方括号中字符可供选择,只要其中一个匹配就可以了
(1)脱字符 ^ 指除了字符类中的字符,其它字符都可以匹配,若方括号中只有^,则表示可以匹配一切字符。(脱字符只有在第一个位置才有特殊含义)
(2)连字符(-),连字符只有出现在方括号内才有意义
注意:连字符不能过大范围的使用,否则会出现想不到的结果
预定义模式
预定义模式指的就是某些常见模式的简写形式
\d 匹配0-9之间的任意数字,相当于[ 0-9 ]
\D 匹配所有0-9以外的字符,相当于[ ^0-9 ]
\w 匹配任意的字母、数字、和下划线,相当于[A-Za-z0-9]
\W 除所有字母、数字、下划线以外的字符,相当于 [^A-Za-z0-9]
\s 匹配空格(包括换行符、制表符、空格符等),相等于[ \t\r\n\v\f]。
\S 匹配非空格的字符,相当于[^ \t\r\n\v\f]。
\b 匹配词的边界。
\B 匹配非词边界,即在词的内部
重复类
模式的精确匹配次数,{n}表示重复n次,{n,}表示重复至少n次,{n.m}表示重复不小于n次,不大于m次
量词符
量词符用来设定某个模式出现的次数
? 问号表示某个模式出现0次或1次,等同于{0, 1}。
*星号表示某个模式出现0次或多次,等同于{0,}。
+加号表示某个模式出现1次或多次,等同于{1,}。
贪婪模式
即最大可能匹配,一直匹配直到下一个字符不满足匹配规则
要想变为非贪婪模式,即只要匹配到一个就停止匹配,在量词符后面加一个问号即可变成非贪婪模式
修饰符
修饰符表示模式的附加规则,放在正则表达式的尾部,可以单个使用,也可以多个一起使用。
(1)g修饰符,表示全局匹配(global),加了它以后,正对象将匹配所有符合条件的结果。每次匹配都是从上次匹配成功后开始向后匹配。
(2)i修饰符,默认情况下,正则对象区分字母的大小写,加上以后不考虑大小写
(3)m修饰符,加上后会修改^和
的
行
为
,
和
的行为,^和
的行为,和除了匹配字符串的开始和结尾处,还可以匹配字符串的行首与行尾。
组匹配
非捕获组:(?:x)返回结果没有该组匹配的内容
先行断言:x(?=y),x只有在y前面才匹配,y不会被计入返回结果
先行否定断言:x(?!y),x只有不在y前面才匹配,y不会被计入返回结果
## js常用方法
1、数组的join()方法:将所有的数组成员以指定参数为连接符连接成字符串 并返回这个字符串(若不提供参数,默认用逗号分隔) 原数组不变
2、数组的concat()方法:用于多个数组的合并,将新数组的成员添加到原数组成员的后面并返回一个新的数组,原数组不变。
3、reverse()方法:将数组颠倒并返回颠倒后的数组,该方法改变了原数组
4、slice() 方法:该方法的作用是截取数组,第一个参数为开始位置,第二个参数为结
束位置(但不包括该位置) 返回截取的数组,不改变原数组。
当参数为负数时,则从数组尾部往前读,但还是向后截取。当第二个参数小于第一个参数或第一个参数大于数组长度时,返回一个空数组。当slice()没有参数,则返回一个与原数组相同的数组,相当与 数组的拷贝。
5、splice()方法:该方法用于删除添加数组成员,有若干参数,第一个参数是删除的开始位置,第二个参数是删除的数量,若有更多的参数,则从删除位置开始添加这些参数到数组,返回被删除的数组成员,该方法会改变原数组,当参数为负数或只有一个参数时,与slice()方法类似。
6、sort()方法:该方法对数组成员进行排序,默认按照字典顺序排序(不是按照大小),如果想要数组按照自己的想法排序可以传入一个函数参数。排序后,原数组被改变。
7、map()方法:该方法将数组的所有成员依次传入参数函数,做一定的运算后再依次返回并存入一个新数组中,该方法返回这个数组。原数组没有变化。
map()方法接受一个函数作为参数,map方法向它传入三个参数(当前数组成员,当前成员位置,数组本身)
map()方法还可以有第二个参数,用来绑定回调函数内部的this变量
8、forEach()方法:数组的forEach方法和map方法类似,只是它不返回数组,只是对数据进行操控,用法、参数的使用都与map方法一样,他们都会跳过数组的空位。
9、filter()方法:参数是一个函数,所有数组成员依次执行该函数,返回结果为true的成员组成一个新数组返回,不会改变原数组。
filter方法的参数函数可以接受三个参数(当前成员,当前位置,整个数组)。
filter方法可以有第二个参数,用来绑定参数函数内部的this变量。
10、some()和every()方法:他们接受一个函数作为参数,所有数组成员依次执行该函数,该函数接受三个参数:当前成员,当前位置,整个数组。some方法只要一个成员返回true,则整个some方法的返回值就是true,every方法是所有数组成员返回true该方法才返回true。对于空数组,some方法返回false,every方法返回true,回调函数都不会执行。
11、indexOf()方法和lastIndexOf()方法:indexOf()方法返回给定元素在数组中出现的第一个位置,没有则返回-1.可以有第二个参数,代表搜索的开始位置。lastIndexOf()方法返回给定元素在数组中出现的最后一个位置,没有则返回-1.
总结:原数组改变的方法: push、pop、shift、unshift、reverse、splice、sort
原数组不变的方法:join、concat、slice、map、filter
这些方法中,返回值是数组的可以链式使用
## String的实例方法
1、String.prototype.charAt():返回指定位置的字符。参数为负数或大于等于字符串的长度时返回空字符串。
2、String.prototype.charCodeAt(): fromCharCode的逆用,将字符串指定位置的字符转换为Unicode码,参数为字符串的下角标,当没有参数时,返回字符串首字符的Unicode码点。
3、concat()方法、slice()方法与数组的这几个方法用法相同
4、String.proyotype.substring()方法与slice用法相似,只是对于参数的解析不同:当第二个参数小于第一个参数时,javascipt引擎会将这两个参数互换位置,当参数为负数时,会将参数转换为0,其他情况与slice()一样。由于substring方法规则违反直觉,因此优先使用slice方法
5、String.prototype.substr()方法也是用于截取字符串,与slice()和substring()方法作用相同。它的第一个参数为子字符串的开始位置,第二个参数为子字符串的长度。若第二个参数省略,则表示截取从开始位置一直到字符串结束。如果第一个参数为负数,则表示倒着计算开始位置,若第二个参数为负数,则自动
转为0,即返回空字符串
6、String.prototype.indexOf()方法和String.prototype.lastIndexOf()方法与数组的这两个方法用法相同,唯一区别是lastIndexOf()方法支持第二个参数,代表从该位置起向前匹配
7、 String.prototype.trim()方法去除字符串两边的空格、换行符、制表符、回车符等,返回一个新字符串,不改变原字符串。
8、String.prototype.toLowerCase()方法与String.prototype.toUpperCase()方法用于将一个字符串全部转为大写或小写字符串,它们都返回一个新字符串,不改变原字符串。
9、String.prototype.match()方法,用于确定原字符串中是否含有某个参数子字符串,返回一个数组,成员为匹配的第一个字符串。返回的数组有index属性和input属性,分别表示匹配字符串开始的位置和原始字符串。
10、String.prototype.search()方法和String.prototype.replace()方法。search方法与match方法用法基本相同,但是search返回匹配的第一个位置,匹配不到则返回-1,replace方法用于替换匹配的字符串,一般情况下只替换第一个匹配。
11、String.prototype.split()方法用于对字符串的分隔,按照给定规则分隔字符串,返回分隔出来的字符串组成的数组。如果分隔规则是空字符串,则返回数组是原字符串的每一个字符。
12、String.prototype.localeCompare()方法用于比较两个字符串,返回一个整数,小于0代表第一个字符串小于第二个字符串,大于0表示第一个字符串大于第二个字符串,为0 代表两个字符串相等(该方法的特点是会考虑自然语言的顺序),该方法可以有第二个参数,代表指定所使用的语言(默认是英语)。
观阮一峰的js教程–笔记