一、数据类型
- 科学计数法
123e5=12300000
123e-5=0.00123 - typeof运算符
语句 | 值 |
---|
typeof "bill" | string |
typeof 0.3 | number |
typeof 数组/对象 | object |
typeof 没有值的变量 | undefined |
typeof 函数 | function |
typeof true /false | Boolean |
null和undefined值相等但类型不相等:
typeof undefined
typeof null
null === undefined
null == undefined
二、JS对象
- 对象定义(对象中的属性不需要加引号)
var person = {
firstname: "Bill",
lastname: "Gates",
id: 678,
fullname: function() {
return this.firstname+" "+this.lastname;
}
}
-
访问对象属性
obj.attrname
或 obj["attrname"]
-
js中两个对象无法进行对比,对比值始终为false
三、JS字符串及字符串方法
常用函数 | 作用 |
---|
str.length | 获取字符串长度 |
str.indexOf(item,start) | 从start开始检索字符串item首次出现的位置 |
str.lastIndexOf(item,start) | 从start开始检索字符串item最后出现的位置 |
str.search(item) | 该检索函数不可设置检索起始位置,最终返回item在字符串中首次出现的位置 |
str.slice(start,end) | 返回一个新的字符串。包括字符串 str从 start 开始(包括 start)到 end 结束(不包括 end)为止的所有字符。当索引为负时,从尾部开始检索 |
str.substring(start,end) | 与slice不同的是不能接受负参数,其余相同 |
str.substr(start,length) | substr类似于slice,不同之处在于,第二个参数为提取的长度,如果省略第二个参数(索引可为负),则提取剩余字符串 |
str.replace(regexp/substr,replacement) | ①regexp/substr:必需。规定子字符串或要替换的模式的 RegExp 对象 ;②replacement:规定了替换文本或生成替换文本的函数。③该函数默认只替换首个匹配,如果要执行大小写不敏感替换,则使用正则表达式/i,replace(/str1/i,str2)。④替换所有匹配,使用g(用于全局搜索),replace(/str1/g,str2) |
str.toUpperCase() | 转大写 |
str.toLowerCase() | 转小写 |
str.concat() | 连接两个或多个字符串:str.concat(srt1,str2,…),所有字符串方法返回新的字符串,但原字符串都被不会被修改 |
str.trim() | 转删除字符串两端的空白符写 |
str.charAt() | 返回指定下标的字符 |
str.charCodeAt() | 返回指定索引的字符的Unicode编码 |
str.split(分隔) | 返回数组,如果分隔符为"",则字符串被分割成单个字符 |
四、JS数字及数字方法
4.1 Number属性对象
typeof NaN :返回number
Number.MAX_VALUE :返回 JavaScript 中可能的最大数。
Number.MIN_VALUE :返回 JavaScript 中可能的最小数。
Number.NaN :表示非数字值("Not-a-Number")。
Number.NEGATIVE_INFINITY :表示负的无穷大(溢出返回),JS显示 NEGATIVE_INFINITY 时使用的是 -Infinity。
Number.POSITIVE_INFINITY :表示无穷大(溢出返回),JS显示 NEGATIVE_INFINITY 时使用的是 Infinity。
4.2 Number常用函数
常用函数 | 作用 |
---|
number.toString(16/8/2) | 把数字输出位十六进制、八进制、二进制 |
number.toExponential(num) | 把Number 对象的值转换成指数计数法。 参数num规定指数计数法中的小数位数 |
toFixed(num) | 把 Number 四舍五入为指定小数位数的数字。参数num规定小数的位数 |
number.toPrecision(num) | 在对象的值超出指定位数时将其转换为指数计数法。参数num规定位数 |
number.valueOf() | 字符串返回数字(注:所有的数据类型都有valueOf()和toString()方法) |
parseFloat(字符串) | 将字符串转成float(注:parseFloat("10 years") 返回10,parseFloat("years 10") 返回 NaN) |
parseInt(串) | 将字符串转成int |
五、JS 数组及数组方法
注意事项:
数组初始化:var cars = ["Saab", "Volvo", "BMW"];使用的是中括号[](java使用的是{})
当然js中的数组初始化不止这一种方法
js不原生支持List,且js数组的长度是可变的
splice()函数会直接修改原数组,而slice不会修改原数组,最终返回截取后的新数组
5.1常用函数
常用函数 | 作用 |
---|
sort() | 排序,直接修改数组,不生成副本 |
push() | 向数组添加新元素,返回新的长度 |
pop() | 删除最后一个元素,返回数组的最后一个元素 |
shift() | 删除首个元素,返回数组的第一个元素 |
unshift() | 在开头添加新元素,并返回新的长度 |
Array.isArray(数组名) | 判断是否为数组 (方法等同于:数组名 instanceof array) |
concat(arrayX,arrayX,......,arrayX) | 连接两个或多个数组,返回新数组 |
join(分隔符) | 用分隔符将数组连成字符串 |
splice(index,howmany,item1,.....,itemX) | 第一个参数定义删除的起始位置,第二个参数定义删除的个数,后面的参数为可选,用于替换那些被删除的元素 。最终返回包含被删除元素的数组 |
slice(start,end) | 第二个参数可省略,截取下标从start-end(不包括end)的元素,返回新数组,不修改原数组 |
indexOf(item,start) | 查找从start开始,item首次出现的索引 |
lastIndextOf(item,start) | 查找从start开始,item最后出现的索引 |
5.2数组迭代
数组迭代函数 | 作用 |
---|
forEach(f) | 数组遍历, function f(value,index,array) (有三个参数,未使用的参数可省略) |
map(f) | 作用同forEach,但map不会更改原数组,不会对没有值的数组元素执行函数,最终返回新数组 |
filter(f) | 最终返回包含通过测试的数组元素的新数组,回调函数中每轮返回true(通过测试)or false |
reduce(f) | function f(total,value,index,array) (参数total是上一个函数的返回值),可用来计算总和,最大值,最小值等等 |
reduceRight(f) | 与reduce函数作用相同,只是遍历顺序相反 |
every(f) | 检查所有数组值是否通过测试,返回true or false |
some(f) | 检查某些数组值是否通过测试 |
find(f) | 返回第一个通过测试的数组元素值 |
findIndex(f) | 返回通过测试的第一个数组元素的索引 |
求数组的最大值或最小值可借助apply
Math.max.apply(null,arr)
Math.min.apply(null,arr)
其中Math.min.apply([1, 2, 3]) 等于 Math.min(1, 2, 3)。
六、JS数学
常用函数 | 作用 |
---|
Math.round(x) | 四舍五入为最近的整数 |
Math.pow(x,y) | x的y次幂 |
Math.sqrt(x) | 平方根 |
Math.abs(x) | 绝对值 |
Math.ceil(x) | 上舍入最近的整数,6.4->7 |
Math.floor(x) | 下舍入最近的整数,2.7->2 |
Math.min(arr) | 求数组的最小值 |
Math.max(x) | 求数组的最大值 |
Math.random() | 返回介于0-1(不包括1)之间的随机数 |
Math.floor(Math.random() * 10) | 返回 0 至 9 之间的数 |
Math.floor(Math.random() * 11) | 返回 0 至 10之间的数 |
Math.floor(Math.random() * 10) + 1 | 返回 1 至 10 之间的数 |
Math.floor(Math.random * (max-min))+ min | 返回介于 min(包括)和 max(不包括)之间的随机数 |
Math.floor(Math.random * (max-min+1))+ min | 介于 min 和 max(都包括)之间的随机数 |
七、JS类型转换
类型转换 | 作用 |
---|
tyepof a | 返回变量数据类型 |
a.constructor | 返回变量的构造器函数,a.constructor===Array/Date/等等 ,可以通过a.constructor.toString().indexOf("数据类型")>-1 判断变量的类是否为某种数据类型 |
String(任意表达式) | 可将其他数据类型转换为字符串 |
Number() | 如果参数是 Date 对象,Number() 返回从 1970 年 1 月 1 日至今的毫秒数。如果对象的值无法转换为数字,那么 Number() 函数返回 NaN。 |
一元运算符+ | 可用于把变量转化为数字 |
八、正则表达式
直接量语法:/pattern/modifiers 即 /模式/修饰符
创建 RegExp 对象的语法:new RegExp(pattern, attributes);
8.1 修饰符
修饰符 | 作用 |
---|
i | 执行对大小写不敏感的匹配(ignoreCase) |
g | 执行全局匹配(查找所有匹配而非在找到第一个匹配后停止)。(global) |
m | 执行多行匹配(multiline) |
8.2 方括号
方括号用于查找某个范围内的字符
表达式 | 描述 |
---|
[abc] | 查找方括号之间的任何字符。 |
[^abc] | 查找任何不在方括号之间的字符。 |
[0-9] | 查找任何从 0 至 9 的数字。 |
[a-z] | 查找任何从小写 a 到小写 z 的字符。 |
[A-Z] | 查找任何从大写 A 到大写 Z 的字符。 |
[A-z] | 查找任何从大写 A 到小写 z 的字符。 |
[adgk] | 查找给定集合内的任何字符。 |
[^adgk] | 查找给定集合外的任何字符。 |
(red | blue |
8.2 元字符
元字符(Metacharacter)是拥有特殊含义的字符:
元字符 | 描述 |
---|
. | 查找单个字符,除了换行和行结束符。 |
\w | 查找单词字符。 |
\W | 查找非单词字符。 |
\d | 查找数字。 |
\D | 查找非数字字符。 |
\s | 查找空白字符。 |
\S | 查找非空白字符。 |
\b | 匹配单词边界。 |
\B | 匹配非单词边界。 |
\0 | 查找 NUL 字符。 |
\n | 查找换行符。 |
\f | 查找换页符。 |
\r | 查找回车符。 |
\t | 查找制表符。 |
\v | 查找垂直制表符。 |
\xxx | 查找以八进制数 xxx 规定的字符。 |
\xdd | 查找以十六进制数 dd 规定的字符。 |
\uxxxx | 查找以十六进制数 xxxx 规定的 Unicode 字符。 |
8.3 量词
量词 | 描述 |
---|
n+ | 匹配任何包含至少一个 n 的字符串。 |
n* | 匹配任何包含零个或多个 n 的字符串。 |
n? | 匹配任何包含零个或一个 n 的字符串。 |
n{X} | 匹配包含 X 个 n 的序列的字符串。 |
n{X,Y} | 匹配包含 X 至 Y 个 n 的序列的字符串。 |
n{X,} | 匹配包含至少 X 个 n 的序列的字符串。 |
n$ | 匹配任何结尾为 n 的字符串。 |
^n | 匹配任何开头为 n 的字符串。 |
?=n | 匹配任何其后紧接指定字符串 n 的字符串。 |
?!n | 匹配任何其后没有紧接指定字符串 n 的字符串。 |
8.4 RegExp 对象方法
方法 | 描述 |
---|
compile | 编译正则表达式 |
exec | 检索字符串中指定的值。返回找到的值,并确定其位置 |
test | 检索字符串中指定的值。返回 true 或 false |
pattern.test(str),返回true or false
pattern.exec(str),返回已找到的文本
8.5 支持正则表达式的 String 对象的方法
方法 | 描述 |
---|
search | 检索与正则表达式相匹配的值 |
match | 找到一个或多个正则表达式的匹配 |
replace | 替换与正则表达式匹配的子串 |
split | 把字符串分割为字符串数组 |
九、JS异常 及 JS作用域、严格模式
9.1 异常语法
try {
if(...) throw err(可为数字、字符串、布尔值或对象)
}
catch(err) {
}
finally {
}
9.2 声明严格模式
"use strict";(根据声明位置的不同,有全局作用域和局部作用域两种),此语句只能在脚本或函数开头被识别
if (typeof myObj !== "undefined" && myObj !== null)
!立个flag,打算之后加上每章的思维导图