资讯专栏INFORMATION COLUMN

JavaScript引用类型——“单体内置对象”的注意要点

xushaojieaaa / 2241人阅读

摘要:单体内置对象单体内置对象就是开发人员不必显式地实例化内置对象,因为他们已经实例化了。前面的章节讨论过了大多数内置对象,还定义了两个单体内置对象和。

单体内置对象

单体内置对象就是开发人员不必显式地实例化内置对象,因为他们已经实例化了。前面的章节讨论过了大多数内置对象,ECMA-262 还定义了两个单体内置对象:Global 和Math。

Global 对象

所有在全局作用域中定义的属性和函数,都是Global 对象的属性。

URI 编码方法

encodeURI()encodeURIComponent()decodeURI()decodeURIComponent()方法。如下:

var uri = "http://www.bai du.com";
console.log(encodeURI(uri));
console.log(encodeURIComponent(uri));

/*
[Log] http://www.bai%20du.com (repetition.html, line 16)
[Log] http%3A%2F%2Fwww.bai%20du.com (repetition.html, line 17)
*/

var uri = "http%3A%2F%2Fwww.bai%20du.com";
console.log(decodeURI(uri));
console.log(decodeURIComponent(uri));    
/*
[Log] http%3A%2F%2Fwww.bai du.com (repetition.html, line 16)
[Log] http://www.bai du.com (repetition.html, line 17)
*/
eval 方法(防止代码注入,应该谨慎使用)

这个方法就是一个完整的解析器,它只接受一个参数,即要执行的ECMAScript(JavaScript)字符串。被执行的代码具有与该执行环境相同的作用域链。这意味着通过eval()执行的代码可以引用在包含环境中定义的变量,且在该方法中创建的任何变量或者函数都不会被提升。如:

eval("function hi(){console.log("hi")}");
hi();

var num = 100;
eval("document.write(num);");

eval("var num = 110;");
document.write(num);

谨慎使用!
特别是他在执行用户数据输入的情况下,后果可能非常严重。

Global 对象的属性

下面的网页列出Global 对象的所有属性:
JavaScript Global 对象

Window 对象(以后再详细讨论)

EFMAScript 虽然没有给出如何直接访问Global 对象,但是Web 浏览器都是将这个全局对象作为window 对象的一部分加以实现的。因此,在全局作用域中声明的所有变量和函数,都成为了window 对象的属性。如:

var color = "red";
var func = function(){
    document.write("func function");
};

console.log(window.color); //red
window.func(); //func function

创建一个立即调用的函数表达式:

var global = function(){
    document.write("func")
}();

(
    function(){
        document.write("func")
    }
)();

上下两种都可以。具体以后讨论函数表达式。

Math 对象

ECMAScript 还为保存了数学公式和信息提供了一个公共位置,即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 的平方根)

min()max()方法

这两个方法对于确定一组数值中的最小和最大值非常好用。两个方法都可以接收任意多个数值。如:

var maxValue = Math.max(321,3,1);
console.log(maxValue); //321

那么如何提取出数组里面的最大值或最小值呢?

var valuesArray = [32,13,214,32,5432,1];
var maxValue = Math.max.apply(this,valuesArray);
document.write(maxValue); //5432

使用apply()方法可以很轻松的改变this 值。可以将任何数组座位第二个参数。

又如:

var valuesArray = [1,321,21,3,3];
function sum(){
    console.log(arguments.length);
    var max = Math.max.apply(this,arguments);
    console.log(max);
}
sum.apply(this,valuesArray);
舍入方法

Math.ceil()Math.floor()Math.round()三个方法分别遵循下面的规则:

Math.ceil()(向上舍入)

Math.round()(标准舍入-四舍五入)

Math.floor()(向下舍入)

random()方法

Math.random()方法返回大于等于0 小于1 的一个随机数。如:

console.log(Math.random());

可以利用某个整数范围内随机选择一个数值:

值 = Math.floor(Math.random() * 可能的值的总数 + 第一个可能的值);

比如想要随机选择一个1-10之间的随机数,就可以写成:

var num = Math.floor(Math.random() * 10 + 1);

如果是想随机选择一个2-4之间的随机数,就可以写成:

var num = Math.floor(Math.random() * 3 + 2);

也可以通过一个函数来自动生成随机数,不必计算可能的值的范围。如:

function selectFrom(lowerValue,upperValue){
    return Math.floor(Math.random() * (upperValue - lowerValue + 1) + lowerValue);
}

通过上面这个函数,可以随机访问Array 的数值。如:

var valuesArray = ["BMW","Audi","Benz"];

function selectFrom(lowerValue,upperValue){
    return Math.floor(Math.random() * (upperValue - lowerValue + 1) + lowerValue);
}

var selectValue = valuesArray[selectFrom(0,valuesArray.length - 1)];
console.log(selectValue);
其他方法

见JavaScript Math 对象

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/86243.html

相关文章

  • JavaScript 闯关记》之单体内置对象

    摘要:单体内置对象对内置对象的定义是由实现提供的不依赖于宿主环境的对象,这些对象在程序执行之前就已经存在了。还定义了两个单体内置对象和。此外,所有原生引用类型的构造函数,像和,也都是对象的属性。 单体内置对象 ECMA-262 对内置对象的定义是「由 JavaScript 实现提供的、不依赖于宿主环境的对象,这些对象在 JavaScript 程序执行之前就已经存在了」。意思就是说,开发人员不...

    antyiwei 评论0 收藏0
  • 如何阅读《JavaScript高级程序设计》(一)

    摘要:题外话最近在看高级程序设计这本书,面对着多页的厚书籍,心里有点压力,所以我决定梳理一下。。全局环境的关闭是页面关闭或者浏览器关闭,而局部环境的关闭是指函数结束。数值范围最大和最小的范围是超出范围的数字如何表示是一个特殊的值。 题外话 最近在看《JavaScript高级程序设计》这本书,面对着700多页的厚书籍,心里有点压力,所以我决定梳理一下。。探究一下到底怎么读这本书。本书的内容好像...

    chadLi 评论0 收藏0
  • 如何阅读《JavaScript高级程序设计》(一)

    摘要:题外话最近在看高级程序设计这本书,面对着多页的厚书籍,心里有点压力,所以我决定梳理一下。。全局环境的关闭是页面关闭或者浏览器关闭,而局部环境的关闭是指函数结束。数值范围最大和最小的范围是超出范围的数字如何表示是一个特殊的值。 题外话 最近在看《JavaScript高级程序设计》这本书,面对着700多页的厚书籍,心里有点压力,所以我决定梳理一下。。探究一下到底怎么读这本书。本书的内容好像...

    jubincn 评论0 收藏0
  • 如何阅读《JavaScript高级程序设计》(一)

    摘要:题外话最近在看高级程序设计这本书,面对着多页的厚书籍,心里有点压力,所以我决定梳理一下。。全局环境的关闭是页面关闭或者浏览器关闭,而局部环境的关闭是指函数结束。数值范围最大和最小的范围是超出范围的数字如何表示是一个特殊的值。 题外话 最近在看《JavaScript高级程序设计》这本书,面对着700多页的厚书籍,心里有点压力,所以我决定梳理一下。。探究一下到底怎么读这本书。本书的内容好像...

    libin19890520 评论0 收藏0
  • 基础回顾-javascript数据类型

    摘要:栈区由编译器自动分配释放,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈。属性返回对创建此对象的构造函数的引用。所有的和都是宿主对象参考高级程序设计堆和栈的概念和区别全面解析中的数据类型与类型转换 数据类型 数据类型划分 javascript中定义了6中基本数据类型(原始值类型),和一种复杂数据类型(引用类型),所谓复杂类型,其本质是由无序的名值对(key:val...

    codergarden 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<