【JS基础】JavaScript内置对象
JavaScript
内置对象与宿主无关,独立于宿主环境的ECMAScript
实现提供的对象,在ECMAScript
程序开始执行时出现。在 ECMAScript
程序开始执行前就存在,本身就是实例化内置对象,开发者无需再去实例化。
内置对象包含:Global
和Math
,ECMAScript5
中增添了 JSON
这个存在于全局的内置对象。
一、Global
对象
ECMAScript
中的 Global
对象在某种意义上是作为一个终极的“兜底儿对象” 来定义的。换句话说,不属于任何其他对象的属性和方法,最终都是Global
对象的属性和方法。事实上,没有全 局变量或全局函数;所有在全局作用域中定义的属性和函数,都是 Global 对象的属性。
URI
编码方法
URI
:(Uniform Resource Identifiers
)通用资源标识符
(1)编码方法
Global
对象的 encodeURI()
和encodeURIComponent()
方法可以对URI
进行编码,以便发送给浏览器。
encodeURI()
主要用于对整个URI
进行编码,不会对本身属于URI
的特殊字符进行编码,例如冒号、正斜杠、 问号和井字号;encodeURIComponent()
主要用于对URI
中的某一段进行编码,会对它发现的任何非标准字符进行编码。
var uri = "http://www.wrox.com/illegal value.htm#start";
// "http://www.wrox.com/illegal%20value.htm#start"
alert(encodeURI(uri));
// "http%3A%2F%2Fwww.wrox.com%2Fillegal%20value.htm%23start"
alert(encodeURIComponent(uri));
注:一般来说 , 我们使用 encodeURIComponent()
方法的时候要比使用 encodeURI()
更多,因为在实践中更常见的是对查询字符串参数而不是对基础 URI
进行编码。
(2)解码方法
decodeURI()
只能对使用encodeURI()
替换的字符进行解码;decodeURIComponent()
能够解码使用encodeURIComponent()
编码的所有字符,即它可以解码任何特殊字符的编码。
var uri = "http%3A%2F%2Fwww.wrox.com%2Fillegal%20value.htm%23start";
// http%3A%2F%2Fwww.wrox.com%2Fillegal value.htm%23start
alert(decodeURI(uri));
// http://www.wrox.com/illegal value.htm#start
alert(decodeURIComponent(uri));
eval()
方法
eval()
函数计算JavaScript
字符串,并把它作为脚本代码来执行;- 只接受一个参数,其中含有要计算的
JavaScript
表达式或要执行的语句;- 如果参数是一个表达式,
eval()
函数将执行表达式;如果参数是Javascript
语句,eval()
将执行Javascript
语句。
eval("alert('hi')");
// 这行代码的作用等价于下面这行代码:
alert("hi");
在 eval()
中创建的任何变量或函数都不会被提升,因为在解析代码的时候,它们被包含在一个字符串中;它们只在 eval()
执行的时候创建。
eval("var msg = 'hello world'; ");
alert(msg); //"hello world"
alert(msg1); // 报错,msg1 is not defined
eval("var msg1 = 'hello hongmao!' ");
Global
对象的属性
下表列出了 Global
对象的所有属性:
属 性 | 说 明 | 属 性 | 说 明 |
---|---|---|---|
undefined |
特殊值undefined
|
Date |
构造函数Date
|
NaN |
特殊值NaN
|
RegExp |
构造函数RegExp
|
Infinity |
特殊值Infinity
|
Error |
构造函数Error
|
Object |
构造函数Object
|
EvalError |
构造函数EvalError
|
Array |
构造函数Array
|
RangeError |
构造函数RangeError
|
Function |
构造函数Function
|
ReferenceError |
构造函数ReferenceError
|
Boolean |
构造函数Boolean
|
SyntaxError |
构造函数SyntaxError
|
String |
构造函数String
|
TypeError |
构造函数TypeError
|
Number |
构造函数Number
|
URIError |
构造函数URIError
|
二、Math
对象
Math
对象用于执行数学任务。与在 JavaScript
直 接编写的计算功能相比,Math
对象提供的计算功能执行起来要快得多。
Math
对象的属性
Math
对象包含的属性大都是数学计算中可能会用到的一些特殊值。如下
属 性 | 说 明 |
---|---|
Math.E |
自然对数的底数,即常量e 的值 |
Math.LN10 |
10 的自然对数 |
Math.LN2 |
2 的自然对数 |
Math.LOG2E |
以2 为底e 的对数 |
Math.LOG10E |
以10 为底e 的对数 |
Math.PI |
π的值 |
Math.SQRT1_2 |
1/2 的平方根(即2 的平方根的倒数 |
Math.SQRT2 |
2 的平方根 |
Math
对象的方法
(1)min()
和 max()
方法
min()
和 max()
方法用于确定一组数值中的最小值和最大值,这两个方法都可以接收任意多个数值参数。
var max = Math.max(3, 54, 32, 16);
alert(max); //54
var min = Math.min(3, 54, 32, 16);
alert(min); //3
要找到数组中的最大或最小值,可以像下面这样使用 apply()
方法:
var values = [1, 2, 3, 4, 5, 6, 7, 8];
var max = Math.max.apply(Math, values);
(2)舍入方法
Math.ceil()
执行向上舍入,即它总是将数值向上舍入为最接近的整数;Math.floor()
执行向下舍入,即它总是将数值向下舍入为最接近的整数;Math.round()
执行标准舍入,即它总是将数值四舍五入为最接近的整数。
alert(Math.ceil(25.9)); //26
alert(Math.ceil(25.5)); //26
alert(Math.ceil(25.1)); //26
alert(Math.round(25.9)); //26
alert(Math.round(25.5)); //26
alert(Math.round(25.1)); //25
alert(Math.floor(25.9)); //25
alert(Math.floor(25.5)); //25
alert(Math.floor(25.1)); //25
(3)random()
方法
Math.random()
方法返回大于等于 0 小于 1 的一个随机数,这个方法非常实用。
套用下面的公式,就可以利用 Math.random()
从某个整数范围内随机选择一个值。
值 = Math.floor(Math.random() * 可能值的总数 + 第一个可能的值)
公式中用到了 Math.floor()
方法,这是因为Math.random()
总返回一个小数值。而用这个小数 值乘以一个整数,然后再加上一个整数,最终结果仍然还是一个小数。
// 选择一个 1到 10 之间的数值
// 总共有 10 个可能的值(1 到 10),而第一个可能的值是 1
var num = Math.floor(Math.random() * 10 + 1);
// 选择一个介于 2 到 10 之间的值
// 从2数到10要数9个数,因此可能值的总数就是9,而第一个可能的值就是 2
var num1 = Math.floor(Math.random() * 9 + 2);
(4)其他方法
方 法 | 说 明 | 方 法 | 说 明 |
---|---|---|---|
Math.abs(num) |
返回num 的绝对值 |
Math.asin(x) |
返回x 的反正弦值 |
Math.exp(num) |
返回Math.E 的num 次幂 |
Math.atan(x) |
返回x 的反正切值 |
Math.log(num) |
返回num 的自然对数 |
Math.atan2(y,x) |
返回y/x 的反正切值 |
Math.pow(num,power) |
返回num 的power 次幂 |
Math.cos(x) |
返回x 的余弦值 |
Math.sqrt(num) |
返回num 的平方根 |
Math.sin(x) |
返回x 的正弦值 |
Math.acos(x) |
返回x 的反余弦值 |
Math.tan(x) |
返回x 的正切值 |
三、JSON
对象
ECMAScript5
对解析JSON
的行为进行了规范,定义了全局对象JSON
。JSON
对象有两个方法:stringify()
和parse()
stringify()
方法
JSON.stringify()
方法用于将 JavaScript
值转换为 JSON
字符串,返回包含 JSON
文本的字符串。
JSON.stringify(value[, replacer[, space]])
参数说明:
value
: 必需, 要转换的 JavaScript 值(通常为对象或数组)。replacer
: 可选。用于转换结果的函数或数组。
var jsonObj = {
"title":"javascript",
"group":{
"name":"jia",
"tel":12345
}
};
JSON.stringify(jsonObj);
// {"title":"javascript","group":{"name":"jia","tel":12345}}
- 如果
replacer
为函数,则JSON.stringify
将调用该函数,并传入每个成员的键和值。使用返回值而不是原始值。如果此函数返回undefined
,则排除成员。根对象的键是一个空字符串:""。
JSON.stringify({a:1,b:2}, function(key, value){
if (typeof value === "number") {
value = 2 * value;
}
return value;
})
// "{"a":2,"b":4}"
- 如果 replacer 是一个数组,则仅转换该数组中具有键值的成员。成员的转换顺序与键在数组中的顺序一样。
var jsonObj = {
"title":"javascript",
"group":{
"a":1
}
};
console.log(JSON.stringify(jsonObj,["group","a"])); // {"group":{"a":1}}
space
:可选,文本添加缩进、空格和换行符,如果space
是一个数字,则返回值文本在每个级别缩进指定数目的空格,如果space
大于10
,则文本缩进10
个空格。space
也可以使用非数字,如:\t
。
JSON.stringify({ p1: 1, p2: 2 }, null, 2);
/*
返回值如下:
"{
"p1": 1,
"p2": 2
}"
*/
parse()
方法
JSON.parse()
方法用于将一个 JSON
字符串转换为对象,返回给定 JSON
字符串转换后的对象。
JSON.parse(text[, reviver])
参数说明:
text
: 必需, 一个有效的JSON
字符串。reviver
: 可选,一个转换结果的函数, 将为对象的每个成员调用此函数。
JSON.parse('[1, 5, "false"]') // [1, 5, "false"]
JSON.parse('null') // null
var o = JSON.parse('{"name": "张三"}');
o.name // 张三
// 接收一个函数参数,在每个键值对儿上调用
var o = JSON.parse('{"a":1,"b":2}', function(key, value) {
if (key === ''){
return value;
}
if (key === 'a') {
return value + 10;
}
});
o.a // 11
o.b // undefined