在JavaScript中,变量是某个对象的属性,函数是某个对象的方法
在浏览器环境里面,定义的全局变量就是window对象的属性
引用类型 | 描述 |
---|---|
Date 类型 | 获取和设置当前日期时间 |
Math 类型 | 用于数学计算 |
Global 类型 | 全局对象,提供全局属性和全局方法 |
Array 类型 | 用于有序的存储多个值 |
RegExp 类型 | 用于对字符串模式匹配及检索替换,是对字符串执行模式匹配的强大工具 |
Error 类型 | 用于匹配代码错误并提供对应提示内容 |
Function 类型 | 用于定义 JavaScript 中的函数 |
Object 类型 | 用于定义 JavaScript 中的对象 |
创建一个Date
类型的对象
var date1 = new Date()
var date2 = new Date
var date3 = Date()
Date
提供now()
方法,可以得到一个从 1970 年1月1日 00:00:00 至当前系统时间的毫秒数值。
Date类型初始化时间也可以指定日期,语法
var date = new Date(year, month [, day [, hours [, minutes [, seconds [, milliseconds]]]]])
此外关于Date类型提供的一些方法与设置方法
获取方法 | 设置方法 | 描述 |
---|---|---|
getDate() | setDate() | 返回 Date 对象“日期”部分数值(1 ~ 31) |
getDay() | 返回 Date 对象“星期”部分的数值(0 ~ 6) | |
getFullYear() | setFullYear() | 返回 Date 对象“年份”部分的实际数值 |
getHours() | setHours() | 返回 Date 对象“小时”部分的数值(0 ~ 23) |
getMilliseconds() | setMilliseconds() | 返回 Date 对象“毫秒”部分的数值(0 ~ 999) |
getMinutes() | setMinutes() | 返回 Date 对象“分钟”部分的数值(0 ~ 59) |
getMonth() | setMonth() | 返回 Date 对象“月份”部分的数值(0 ~ 11) |
getSeconds() | setSeconds() | 返回 Date 对象“秒”部分的数值(0 ~ 59) |
getTime() | setTime() | 返回 Date 对象与 UTC 时间 1970 年 1 月 1 日午夜之间相差的毫秒数 |
在Date类型提供的方法中,可以用来做时间戳的方法有两个:
getTime()
方法
Date.now()
方法
关于日期格式化方法:
方法 | 描述 |
---|---|
toString() | 返回 Date 对象的字符串形式 |
toDateString() | 返回 Date 对象“日期”部分(年月日)的字符串形式 |
toTimeString() | 返回 Date 对象“时间”部分(时分秒)的字符串形式 |
toLocaleString() | 基于本地时间格式,返回 Date 对象的字符串形式 |
toLocaleDateString() | 基于本地时间格式,返回 Date 对象“ 日期”部分(年月日)的字符串形式 |
toLocaleTimeString() | 基于本地时间格式,返回 Date 对象“时间”部分(时分秒)的字符串形式 |
toGMTString() | 基于 GMT 时间格式,返回 Date 对象的字符串形式 |
toUTCString() | 基于 UTC 时间格式,返回 Date 对象的字符串形式 |
输出当前年月日
console.log(
date.getFullYear() +
"年" +
(date.getMonth() + 1) +
"月" +
date.getDate() +
"日"
);
JavaScript 语言中的 Math 类型,提供了一系列有关数学常数的属性和数学计算的方法。Math 类型与 JavaScript 语言中的其他引用类型不同的是,Math 并不是一个构造函数。换句话讲,我们无法通过 Math 类型创建一个对象。
Math类型的属性包括以下一些:
属性 | 描述 |
---|---|
Math.E | 欧拉常数,自然对数的底数, 约等于 2.718 |
Math.LN2 | 2 的自然对数, 约等于 0.693 |
Math.LN10 | 10 的自然对数, 约等于 2.303 |
Math.LOG2E | 以 2 为底 E 的对数, 约等于 1.443 |
Math.LOG10E | 以 10 为底 E 的对数, 约等于 0.434 |
Math.PI | 圆周率,一个圆的周长和直径之比,约等于 3.14159 |
Math.SQRT1_2 | 1/2 的平方根, 约等于 0.707 |
Math.SORT2 | 2 的平方根,约等于 1.414 |
以上属性均为只读属性,不可更改。但是如果强制修改也不会报错。
这里指的不能修改指的是Math.PI
不可修改,但是如果将其赋予一个变量,然后修改这个变量,那么值还是可以修改的。
var test1 = Math.PI;
console.log(test1 - 3); //输出 0.14159265358979312
Math.PI = Math.PI - 3;
console.log(Math.PI); // 输出 3.141592653589793
Math类型的方法
方法 | 描述 |
---|---|
abs(x) | 返回 x 的绝对值 |
exp(x) | 返回 e 的指数 |
log(x) | 返回数的自然对数(底为 e) |
pow(x, y) | 返回 x 的 y 次幂 |
ceil(x) | 对数进行向上取整 |
floor(x) | 对数进行向下取整 |
round(x) | 把数四舍五入为最接近的整数 |
max(x, y) | 返回 x 和 y 中的最高值 |
min(x, y) | 返回 x 和 y 中的最低值 |
在JavaScript
中,生成随机数要用到的方法是random()
// 得到一个 0~100 之间的随机整数
console.log(Math.floor(Math.random() * 100));
// 得到一个1~100 之间的随机整数
console.log(Math.floor(Math.random() * 99 + 1));
// 利用随机数算百分率 -> 30% 70%
var precent = Math.random() * 100;
if (precent < 40) {
console.log("30%");
} else {
console.log("70%");
}
即检测一个变量是否为数组。
instanceof
运算符
Array.isArray()
方法
支持 Array.isArray()
方法的浏览器有 IE9+、Firefox 4+、Safari 5+、Opera 10.5+ 和 Chrome。换句话讲,还有一些浏览器版本是不支持 Array.isArray()
方法的。
Object.prototype.toString.call()
方法
用于解决Array.isArray()
在部分浏览器不支持的问题
Array.prototype.isPrototypeOf()
方法
var test = [1, 2, 3, 4, 5];
console.log("instanceof检测test变量是否为数组:", test instanceof Array);
console.log("Array.isArray()检测test变量是否为数组:", Array.isArray(test));
console.log(
"Object.prototype.toString.call()检测test变量是否为数组:",
Object.prototype.toString.call(test)
);
console.log(
"Array.prototype.isPrototypeOf()检测test变量是否为数组:",
Array.prototype.isPrototypeOf(test)
);
从图中我们可以看到,只有Object.prototype.toString.call()
这种方式返回的是[object Array],其余三种方法都返回的是布尔类型。
toString()
方法:将一个数组转换为字符串,数组中的元素之间使用逗号(,
)进行分隔。valueOf()
方法:得到当前对象的原始值。如果是 Array 的话,则得到数组对象本身。push()
方法:该方法将一个或多个数据内容添加到指定数组的末尾,并返回该数组的新长度。pop()
方法:该方法将从指定数组的末尾删除一个数据内容,并返回被删除的数据内容。该方法会改变数组的长度。栈操作的是列表的末尾。
var arr = [100, true, "这是一个字符串"];
//push会将数据放到列表的末尾
var count = arr.push(200);
console.log("添加新元素之后的数组长度为: " + count, arr);
//pop会将列表的最后一项删除
var result = arr.pop();
console.log("数组删除的元素为: " + result, arr);
队列即向列表头添加或删除数据。我们使用的方法是
unshift(x)
向列表头添加x
shift()
删除列表第一项
var test = [1, 2, 3, 4];
var count = test.unshift(0);
console.log(test); // 打印[ 0, 1, 2, 3, 4 ]
var result = test.shift();
console.log(test); // 打印[ 1, 2, 3, 4 ]
reverse()
方法:该方法将数组中元素的位置进行颠倒,并将颠倒后的数组返回。sort()
方法:该方法按照升序排列方式将数组中的元素进行重新排序,并将重新排序的数组返回。值得注意的是:sort()
方法对于数字并不是按照大小排序的,而是按照第一个数字的大小排序的。例如:
var arr = [1, 21, 10, 5, 2];
console.log(arr.sort()); //结果为 [ 1, 10, 2, 21, 5 ]
如果我们要按照大小排序,则应传入回调函数array.sort([compareFunction])
var arr = [1, 21, 10, 5, 2]
var result = arr.sort(function(a, b){
if (a < b) {
return -1
} else if (a > b) {
return 1
} else {
return 0
}
})
console.log(result)
Aarray 提供了 concat()
方法用来合并两个或者多个数组。该方法不会改变原有数组,返回合并后的新数组。其语法结构如下所示:
var new_array = old_array.concat(value1[, value2[, ...[, valueN]]])
如下示例代码展示了使用 concat()
方法合并两个数组的用法:
var arr = [1, 2, 3, 4, 5]
var result = arr.concat([6, 7, 8, 9, 10])
console.log(result, arr)
slice()
方法:该方法可以根据开始位置和结束位置从某个数组中截取指定的数据内容,并将其返回。
var new_arr = arr.slice([begin[, end]]) 此方法并不会影响原来的数组。 var arr = ["ant", "bison", "camel", "duck", "elephant"]; var result = arr.slice(1, 3); console.log(result, arr); //结果为 [ 'bison', 'camel' ] [ 'ant', 'bison', 'camel', 'duck', 'elephant' ] 如果不写end参数,则截取开始到结束的所有元素。
splice()
方法:该方法可以实现对某个数组的新增、修改以及删除等操作。
var arr = array.splice(start[, deleteCount[, item1[, item2[, ...]]]])
splice()
方法向某个数组的 start 位置新增元素。如下示例代码所示
var arr = [3, 4, 5]; var result = arr.splice(1, 0, "1", "2"); console.log(result, arr); //返回结果为 [] [ 3, '1', '2', 4, 5 ] 我们可以看到由于我们并没有删除 arr 数组中任何一个元素,所以 splice()
方法返回的结果为空数组。并且 splice()
方法会改变原有数组。
splice()
方法从某个数组的 start 位置开始删除 deleteCount 个元素。
var arr = [3, 4, 5]; var result = arr.splice(1, 2); console.log(result, arr); // 返回结果 [ 4, 5 ] [ 3 ] 我们可以看到当省略 item1、item2 … 等参数时,splice()
方法返回的结果为被删除的元素所组成的数组。
如果 deleteCount 参数的值大于 array.length-start
值的话,则将 start 位置之后的所有元素删除(包含 start 位置)
splice()
方法将某个数组从 start 位置开始的 deleteCount 个元素替换为 item1、item2 … 等新的元素。
var arr = [3, 4, 5]; var result = arr.splice(1, 1, "2"); console.log(result, arr); //返回结果[ 4 ] [ 3, '2', 5 ] ECMA-262 第 5 版本为 Array 新增了两个有关位置的方法。这两个方法都接收 2 个参数:一个是要查找的元素,一个是开始查找的位置。如下所示:
indexOf()
方法:在某个数组中查找指定元素的第一个索引值。如果存在则返回索引值,如果不存在则返回 -1。lastIndexOf()
方法:在某个数组中查找指定元素的最后一个索引值。如果存在则返回索引值,如果不存在则返回 -1。ECMA-262 第 5 版本为 Array 新增了 5 个迭代数组的方法,也就是遍历数组中元素的方法。如下所示:
forEach()
方法:遍历数组中每一个元素时,会执行一个给定的函数。该方法没有返回值。every()
方法:遍历数组中每一个元素,判断每一个元素是否满足给定函数的条件。如果满足则返回 true,否则返回 false。filter()
方法:遍历数组中每一个元素,将满足给定函数条件的每一个元素组成一个新数组,并返回。map()
方法:遍历数组中每一个元素,在给定函数中对每一个元素进行处理,并创建一个新数组进行返回。some()
方法:遍历数组中每一个元素,如果有一个元素满足给定函数的条件,则返回 true,否则返回 false。上述 5 个迭代方法都是接收 2 个参数,一个是给定的函数,一个是调用给定函数时的 this 值(可选项)。而给定的函数还接收 3 个参数,如下所示:
var arr = ['ant', 'bison', 'camel', 'duck', 'elephant']
arr.forEach(function(currentValue, index, array){
console.log('当前元素的索引值为 ' + index + ', 元素为 ' + currentValue)
})
ECMA-262 第 5 版本为 Array 新增了 2 个归并方法。所谓的归并,就是指遍历数组中每一个元素,并调用给定的函数,将最终的结果进行返回。
reduce()
方法:从左至右地遍历数组中每一个元素,调用给定的函数,并将最终的结果返回。reduceRight()
方法:从右至左地遍历数组中每一个元素,调用给定的函数,并将最终的结果返回。上述 2 个归并方法都是接收 2 个参数,一个是给定的函数,一个是第一次调用给定函数传递的给定函数的第一个参数值(可选项)。而给定的函数接收 4 个参数,如下所示:
var arr = [0, 1, 2, 3, 4, 5]
var result = arr.reduce(function(accumulator, currentValue, currentIndex, array){
return accumulator + currentValue
})
console.log(result)