🤔 1.什么是内置对象
任何由ECMAScript提供、与宿主环境无关,并在ECMAScript执行时就存在的对象。我们前面提到的String、Object、Array、Number、Boolean这些都是内置对象。
执行时就存在,也就是说,我们不需要显示的实例化内置对象,因为已经实例化好了。 比如定义一个字符串类型时:
let str = "aaa"
str.substring(2)
在执行let str = "aaa"
后实际上js后台是实例化一个对象了的let str = new String("aaa")
所以才可以使用 .substring()
这节课介绍另外两个单例内置对象:Global 和 Math。我也一直在纠结"单例"是什么意思。但是看了很多书上也没有过多的解释。就记住这两个是单例内置对象就好了。
或许不了解Global,但是我们一定知道window。不要急慢慢看
兜底对象
代码不会显式的访问它。其作为对象的一种兜底对象,其针对的是不属于任何对象的属性和方法。
不存在全局变量
事实上,不存在全局变量或全局函数。在全局作用域中定义的变量和函数都会成为Global对象的属性。如:isNaN() isFinite() parseInt() parseFloat()
等。
首先知道一下URL 和 URI
URI
统一资源标识符,关键字是标识,比如:某知名吴姓男明星涉嫌强奸罪。我们知道了有这么个男星,姓吴,犯的是强奸罪。
Web上可用的每种资源如HTML文档、图像、视频片段、程序等都是一个来URI来定位的;
URI一般由三部组成
①访问资源的命名机制
②存放资源的主机名
③资源自身的名称,由路径表示,着重强调于资源。
URL
统一资源定位符,关键字是定位,比如:某知名男星、归国四子之一、加拿大华人,任《中国有嘻哈》导师的吴某凡涉嫌强奸女粉丝,被朝阳分局依法逮捕。这就定位到了这个人。URL是URI的子集,好比URI是牙签,URL代表加拿大的牙签。
URL是Internet上用来描述信息资源的字符串,主要用在各种WWW客户程序和服务器程序上,特别是著名的Mosaic。
采用URL可以用一种统一的格式来描述各种信息资源,包括文件、服务器的地址和目录等。
URL一般由三部组成
①协议(或称为服务方式)
②存有该资源的主机IP地址(有时也包括端口号)
③主机资源的具体地址。如目录和文件名等
言归正传。 这里我们需要了解四个方法
let uri = "http://www.wrox.com/illegal value.js#start"
// 编码
// encodeURI只是将空格替换为%20
// encodeURIComponent将所有非字母字符都替换成了相应的编码
encodeURI(uri) // 'http://www.wrox.com/illegal%20value.js#start'
encodeURIComponent(uri) //'http%3A%2F%2Fwww.wrox.com%2Fillegal%20value.js%23start'
// 解码
// 'http%3A%2F%2Fwww.wrox.com%2Fillegal value.js%23start'
// 20%会被替换为空格 但是 23%不会被替换为#
decodeURI('http%3A%2F%2Fwww.wrox.com%2Fillegal%20value.js%23start')
// 'http://www.wrox.com/illegal value.js#start'
decodeURIComponent('http%3A%2F%2Fwww.wrox.com%2Fillegal%20value.js%23start')
escape()和unescape()被以上方法取代,并且已经废弃了。
eval() 函数计算 JavaScript 字符串,并把它作为脚本代码来执行。
如果参数是一个表达式,eval() 函数将执行表达式。如果参数是Javascript语句,eval()将执行 Javascript 语句。
比如我们在控制台执行以下代码,就会将结果在我们的页面上显示。
eval("document.write('2+2')")
在eval执行的代码会被添加到上下文中。所以在eval中可以使用外部的变量。同样外部也可以eval使用内部的一切
let msg = "hello"
eval("console.log(msg)")
eval("function say(){console.log('hello')}")
say()
虽然ECMA没有规定访问Global的方式。但是浏览器将window对象实现为Global对象的代理。 所有全局作用域中声明的变量和函数都成了window的属性。
var color ="red"
function sayColor(){
console.log(window.color)
}
window.sayColor() // "red"
立即调用函数获得global 这种在函数后加上()的形式就是立即调用函数
let global = function(){
return this
}()
在一个函数没有指明this值的情况下,this值等于Global对象。
看到单词就知道,是提供一些数学处理的对象。在Math上提供的计算,要比直接在JavaScript上计算要快。
可在需要时使用
Math.E // 自然对数的基数e的值 2.718281828459045
Math.LN10 //10为底的自然对数 2.302585092994046
Math.LN2 // 2为底的自然对数 0.6931471805599453
Math.LOG2E // 以2为底e的对数
Math.LOG10E // 以10为底e的对数
Math.PI // π
Math.SQRT1_2 // 1/2的平方根
Math.SQRT2 // 2的平方根
可传入多个参数
max = Math.max(3,54,17,9) // 54
min = Math.min(8,9,0) // 0
要想知道数组中的最大值/最小值可以使用扩展操作符。
let a = [1,9,6,19,89,3]
Math.max(...a)
// 向上取整
Math.ceil(23.4) // 24
// 向下取整
Math.floor(23.8) // 23
// 四舍五入
Math.round(23.4) // 23
Math.round(23.5) // 24
// 数值最接近的单精度浮点值 个人觉得没什么用
Math.fround(23.5) // 23.5
Math.fround(23.9) // 23.899999618530273
随机数,返回0~1范围内的随机数[0,1)包含0但是不包含1
取到1~10随机数
可以使用向上取整/向下取整
Math.ceil(Math.random()*10)
Math.floor(Math.random()*10+1) // 0.1向下取整是0,9.9向下取整是9 所以需要加一
一些常用的
Math.abs(x) // 返回x的绝对值
Math.log(x) // 返回x的自然对数
Math.pow(x,power) // x的power次幂
Math.sqrt(x) // 返回x的平方根
Math.cbrt(x) // 返回x的立方根
Math.acos(x) // 返回反余弦
Math.cos(x) // 返回余弦
Math.sin(x) // 返回正弦
Math.tan(x) // 返回正切