【JS基础】(十一)JavaScript内置对象

JavaScript内置对象与宿主无关,独立于宿主环境的ECMAScript实现提供的对象,在ECMAScript 程序开始执行时出现。在 ECMAScript 程序开始执行前就存在,本身就是实例化内置对象,开发者无需再去实例化

内置对象包含:GlobalMathECMAScript5中增添了 JSON 这个存在于全局的内置对象。

一、Global对象

ECMAScript 中的 Global 对象在某种意义上是作为一个终极的“兜底儿对象” 来定义的。换句话说,不属于任何其他对象的属性和方法,最终都是Global 对象的属性和方法。事实上,没有全 局变量或全局函数;所有在全局作用域中定义的属性和函数,都是 Global 对象的属性

  1. 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)); 
  1. 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!' "); 
  1. 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 对象提供的计算功能执行起来要快得多。

  1. 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的平方根
  1. 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.Enum 次幂 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的行为进行了规范,定义了全局对象JSONJSON对象有两个方法:stringify()parse()

  1. 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
}"
*/
  1. 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
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,457评论 5 459
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,837评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,696评论 0 319
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,183评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,057评论 4 355
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,105评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,520评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,211评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,482评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,574评论 2 309
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,353评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,213评论 3 312
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,576评论 3 298
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,897评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,174评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,489评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,683评论 2 335

推荐阅读更多精彩内容