当前位置: 美高梅集团手机版 > 美高梅集团 > 正文

那么字面量的值等于e之前的数字与10的e之后的数

时间:2019-10-04 13:11来源:美高梅集团
语法 内建对象就好比是JDK中的类库,开发者可以直接拿来使用,这极大的方便了常见的编程任务。这篇文章就来浏览一下主要的内建对象,当然,我们并不是第一次接触内建对象,前面

澳门美高梅游戏 1

语法

内建对象就好比是JDK中的类库,开发者可以直接拿来使用,这极大的方便了常见的编程任务。这篇文章就来浏览一下主要的内建对象,当然,我们并不是第一次接触内建对象,前面已经接触到的就有Object、Function、Boolean、Number、String,对于已经介绍过的,这里再总结复习一下,没有介绍过的,根据相关性来对比的总结,RegExp对象及正则表达式在下一篇中再单独介绍。

JavaScript 一直在不断改进和添加更多新功能。TC39 已经完成,并批准了 ES2019 的 8 项新功能。这个过程包含了 5 个阶段:

1.数字

a. javascript只有一种数字类型,表示64位的浮点数,避免了短整型的溢出问题。1和1.0是相等的

b. 一个数字字面量有指数部分,那么字面量的值等于e之前的数字与10的e之后的数字的次方相等。所以100===1e2

c. NaN是一个数值,不等于任何值,包括他自己。可用isNaN(number)检测NaN。

d. Infinity无穷大

1、内建全局单例对象

  • 第 0 阶段:稻草人

  • 第 1 阶段:提案

  • 第 2 阶段:草案

  • 第 3 阶段:候选

  • 第 4 阶段:已完成 / 已批准

2.字符串

a. 用单引号或者双引号,(反斜线)是转义字符,由于Unicode是一个16位的字符集,所以javascript的字符串也是16位的。

b. u指定数字字符编码,如 “A” === "u0041"

c. 字符串有length属性

d. 字符串是不可变的,但是可以通过+运算创建新的字符串

(1)内建全局单例对象:在整个执行环境中只有一个对象实例,这些对象没有内部属性[[Construct]]和[[Call]],因此不能使用new来创建,也不能作为函数来调用,而是直接使用对象名称来引用其属性和方法(对于全局对象,则可以直接使用属性和方法名)。内建全局单例对象有Global、Math、JSON。

第 0 阶段的提案:

3.语句

a. switch、while、for和do语句允许有一个可选的前置标签,配合break使用。

b. false,null,undefined,空字符串'   ',数字0,数字 NaN都是假,其他所有值都是真,包括true,字符串“false”,以及所有的对象。

c. for in语句。通常需要检测object.hasOwnProperty(variable)来确定这个属性名是该对象的成员,还是来自于原型链。

for(myvar in obj){

if(obj.hasOwnProperty(myvar)){...}

}

(2)内建常量:主要是指内建全局单例对象的属性,这些属性的[[Writable]]、[[Configurable]]、[[Enumerable]]特性全部为false,因此不能修改属性值,不能删除属性,也不能在for-in循环中枚举。这些内建常量有:

第 1 至 3 阶段的提案:

4.表达式

a. typeof 运算符产生的值有 'number'、'string'、'boolean'、'undefined'、'function'和'object'。数组或者null,结果是'object'

对象

第 4 阶段的提案:

对象

javascript的简单数据类型包含数字、字符串、布尔值、null和undefined。其他所有的值都是对象。

一个对象字面量就是包围在一对花括号中的零或多个“名/值”对。

对象是“名/值”对的集合并拥有一个连到原型对象的隐藏链接。

名称

废话不多说,接下来让我们来逐一介绍这些功能。

1.引用

对象通过引用来传递,永远不会被复制。

常量值

1. 可选的 catch 绑定

可选的 catch 绑定提案是为了能够选择性地移除使用不到的 catch 绑定。

try { // trying to use a new ES2019 feature // which may not be implemented in other browsers} catch  { // revert back to old way}

现在可以删除使用不到的绑定。

try { ...} catch { ...}

2.原型

每个对象都连接到一个原型对象,并且它可以从中继承属性。所有通过对象字面量创建的对象都连接到Object.prototype。

原型链在更新时是不起作用的。当我们对某个对象作出改变是,不会触及该对象的原型,原型链只有在检索值的时候才会被用到。

原型关系是一种动态的关系。如果我们添加一个新的属性到原型中,该属性会立即对所有寄语该原型创建的对象可见。

function F(){}

F.prototype.a=[1,2];

var f = new F();

f.a.push(3);

F.prototype.a;//[1,2,3]原型被修改

f.a = null;

F.prototype.a;//[1,2,3]原型不变

说明

2.JSON 超集

这个提案的目的是让 JSON 字符串可以包含未转义的 U+2028 LINE SEPARATOR 和 U+2029 PARAGRAPH SEPARATOR 字符,而 ECMAScript 字符串是不能包含这些字符的。在 ES2019 生效之前,这样做会出现“SyntaxError: Invalid or unexpected token”错误。

const LS = eval('"u2028"');const PS = eval("'u2029'");

3.删除

delete运算符可以用来杀喊出对象的属性。如果对象包含该属性,那么该属性就会被移除。它不会触及原型链中的任何对象。删除对象的属性可能会让来自原型链中的属性透视出来。

对象

3. 符号描述

符号是在 ES2015 中引入的,具有非常独特的功能。在 ES2019 中可以提供给定的描述,目的是避免间接从 Symbol.prototype.toString 获取描述。

const mySymbol = Symbol('myDescription');console.log; // Symbol(myDescription)console.log(mySymbol.toString; // Symbol(myDescription)console.log(mySymbol.description); // myDescription

4.减少全局变量污染

方法一、只创建一个唯一的全局变量。var MYAPP = {};

方法二、闭包

名称

4. 修订版的 Function.prototype.toString

之前的函数原型已经有 toString 方法,但是在 ES2019 中,它经过了修订,可以包含函数内的注释,不过不适应于箭头函数。

function /* comment */ foo /* another comment */ (){} // Beforeconsole.log(foo.toString; // function foo(){} // Now ES2019console.log(foo.toString; // function /* comment */ foo /* another comment */ (){} // Arrow Syntaxconst bar /* comment */ = /* another comment */ () => {} console.log(bar.toString => {}

函数

常量值

5.Object.fromEntries

它是 Object.entries 方法的反向操作,可用于克隆对象。

const obj = { prop1: 1, prop2: 2,}; const entries = Object.entries;console.log; // [ [ 'prop1', 1 ], [ 'prop2', 2 ] ]const fromEntries = Object.fromEntries;console.log(fromEntries); // Object { prop1: 1, prop2: 2 }console.log(obj === fromEntries); // false

不过需要注意的是,嵌入式对象 / 数组都只是引用。

const obj = { prop1: 1, prop2: 2, deepCopy: { mutateMe: true }}; const entries = Object.entries;const fromEntries = Object.fromEntries;fromEntries.deepCopy.mutateMe = false;console.log(obj.deepCopy.mutateMe); // false

1.函数对象

对象字面量产生的对象连接到Object.prototype。函数对象连接到Function.prototype(该源性对象本身连接到Object.prototype)。每个函数在创建的时候会附加两个隐藏属性:函数的上下文和实现函数行为的代码。

一切对象都是Object的实例,一切函数都是Function的实例。Object是Function的实例,而Function.prototype是Object的实例。

澳门美高梅游戏 2

可见,Object作为构造函数,它有prototype属性指向Object.prototype, 作为实例对象, 它有Object.__proto__指向Function.prototype。Function是构造函数,它有prototype属性指向Function.prototype,而Function是函数,从而也是Function的实例,所以它有Function.__proto__指向Function.prototype,从而Function.__proto__ === Function.prototype为true。

说明

6. 格式化的 JSON.stringify

这个提案是由同一个人提出来的,与 JSON 超集有关。ES2019 将使用 JSON 转义序列表示输出结果,而不是返回 UTF-16 代码单元。

// Beforeconsole.log(JSON.stringify); // "�" // Now ES2019console.log(JSON.stringify); // "ud800"

2.调用

每个函数在调用是都会接受两个附加参数,this和arguments

4种调用模式:方法调用模式,函数调用模式,构造器调用模式和apply调用模式。

方法调用模式:函数保存为对象的一个属性,我们称它为一个方法。当一个方法被调用时,this被绑定到该对象

函数调用模式:当函数并非是一个对象的属性时,那么他就被当做一个函数来调用,此时this绑定到全局对象

构造器调用模式:一个函数,如果创建的目的就是希望结合new前缀来调用,就称它为构造器函数,首字母大写。调用之后,实例对象的__proto__会链接到构造函数prototype的,this会被绑定到新对象上。

Apply调用模式:apply方法让我们构建一个参数数组传递给调用函数。它允许我们选择this的值。apply接收两个参数,要绑定给this的值和参数数组。call,bind

function Qua(string){this.status = string}

Qua.prototype.get_status = function(){

return this.status;
}

//构造一个包含status的对象

var statusObject = {status:'A-OK'};

//statusObject并没有继承Qua.prototype,但是可以调用get_status

var status = Qua.prototype.get_status.apply(statusObject);//传入this,this指statusObject。结果是A-OK

Global

7.String.prototype 的 trimStart 和 trimEnd

String 原型已经有了 trim 方法,用来移除字符串开头和结尾的空格。而 ES2019 引入了 trimStart 和 trimEnd。

// Trimconst name = " Codedam ";console.log(name.trim; // "Codedam" // Trim Startconst description = " Unlocks Secret Codes ";console.log(description.trimStart; // "Unlocks Secret Codes " // Trim Endconst category = " JavaScript ";console.log(category.trimEnd; // " JavaScript"

3.参数

arguments并不是一个真正的数组,它只是一个类似数组的对象,拥有length属性,但没有任何数组的方法。

NaN

8.Array.prototype 的 flat 和 flatMap

flat 方法通过将所有子数组元素以递归方式连接到指定的深度来创建数组。默认深度为 1,使数组的第一层嵌套展平。

const arr = [1, 2, [3, 4, [5, 6]]];arr.flat(); // [1, 2, 3, 4, [5, 6]]arr.flat; // [1, 2, 3, 4, 5, 6] // You can use Infinity to flatten all the nested arrays no matter how deep the array is const arrExtreme = [1, [2, [3, [4, [5, 6, 7, [8, 9]]]]]];arrExtreme.flat; // [1, 2, 3, 4, 5, 6, 7, 8, 9]

flatMap 方法类似于 flat,并且还与 map 相关,它会先映射数组然后将其展平。

const arr = ['Codedam', 'is Awsome', '!']; const mapResult = arr.map(item => item.split;console.log(mapResult); // [ [ 'Codedam' ], [ 'is', 'Awsome' ], [ '!' ] ] const flatMapResult = arr.flatMap(chunk => chunk.split;console.log(flatMapResult); // ['Codedam', 'is', 'Awsome', '!'];

我还想强调一下现在处在第 3 阶段的一些有用的特性。

  • globalThis;

  • BigInt;

  • import();

  • 遗留的 RegEx;

  • 私有的实例方法;

  • String.prototype.matchAll。

英文原文:

4.闭包

函数可以访问它被创建时的所处的上下文环境。内部函数能访问外部函数的实际变量而无需复制。

//错误示例

var add_the_handlers = function(nodes){

   var i;

for(i=0;i<nodes.length;i++){

nodes[i].onclick = function(){

alert(i);

}

}

}

//该函数的本意是想传递给每个事件处理器一个唯一的i,但是事件处理器函数绑定了变量i本身,而不是函数在构造是的变量i的值

//改良版

var add_the_handlers = function(nodes){

var helper = function(i){

return function(e){alert(i)}

}

澳门美高梅游戏 ,var i;

for(i=0;i<nodes.length;i++){

nodes[i].onclock=helper(i);//返回当前的i值

}

}

NaN

方法

表示不是数值

1.Array

concat(item,...):如果参数item是数组,那么他的每一个元素会被分别添加

join(separator):默认的separator是逗号。

pop():移除数组中的最后一个元素并返回该元素。如果数组是empty,那么返回undefined

push(item...):把一个或多个参数item附加到数组尾部,如果item是数组,会把item座位整体添加到数组尾部,并返回这个array的新长度值。

reverse():反转数组中的元素顺序,并返回数组本身[数组被改变了]。

shift():移除数组中的第一个元素并返回该元素,如果是空数组,返回undefined。shift通常比pop慢的多。

slice(start,end):对数组中的一段做浅复制。

sort(comparefn):对数组中的元素进行排序,不能正确地给一组数字排序。因为javascript默认的比较函数会把被排序的元素都视为字符串。

splice(start,deleteCount,item...):从数组中移除一个或多个元素,并用新的item替换他们。

unshift(item...):和push类似,只是他是把item插入到数组的开始部分,并返回数组心得length。

Math

2.Function

apply(thisArg,argArray):传递一个绑定到this上的对象和一个可选的数组作为参数。

E

3.Number

toExponential(fractionDigits):传换成一个指数形式的字符串,可选参数是控制小数点后的数字位数,值必须在0-20.

toFixed(fractionDigits):转换成一个十进制形式的字符串,可选参数是控制小数点后的数字位数,值必须在0-20,默认值是0

toPrecision(precision):转换成一个十进制数形式的字符串。可选参数是控制数字的精度[和控制小数点位数是不一样的,从整数部分算起],值必须在0-21

toString(radix):转成字符串。可选参数radix控制基数,值在2-36之间,常用的是整数,但是可以用任意的数字。在最普通的情况下number.toString()可以简单写成String(number)。

≈2.718

4.Object

hasOwnProperty(name):如果一个object包含一个名为name的属性,那么hasOwnproperty返回true。原型链中的同名属性是不会被检查的。

var a = {member:true};
var b = Object.create(a);

a.hasOwnproperty('member');//true

b.hasOwnproperty('member');//false

b.member;//true

自然对数的底数 e

5.RegExp

regexp.exec(string):是使用正则表达式最强大(和最慢)的方法。匹配成功会返回一个数组。下标为0的是包含正则表达式regexp匹配的子字符串,下标为1的元素是分组1捕获的文本...以此类推,如果匹配失败,返回null。

regexp.test(string):最近单和最快的方法。尽量不要对这个方法使用g标识。返回true或false

Infinity

6.String

string.charAt(pos):返回string中pos位置的字符。如果pos小于0或大于等于字符串的长度,返回空字符串。

string.charCodeAt(pos):返回string中pos位置处的字符的字符码位。如果pos小于0或大于等于字符串的长度,返回空NaN

string.concat(string...)

string.indexOf(searchString,position):查找子串的位置

string.lastIndexOf(searchString,position):从末尾开始查找,但是position是从前往后数

var text = 'Mississippi';

text.lastIndexOf('ss');//5

text.lastIndexOf('ss',3);//原始string变成Miss   结果是2

text.lastIndexOf('ss',6);//原始串变成Mississ  结果是5

string.localeCompare(that):

string.match(regexp):

string.replace(searchValue,replaceValue):只会替换第一次出现的,所以一般searchValue是一个带有g标识的正则,这样可以替换所有的匹配,如果不带g,则只会替换第一个匹配。

string.search(regexp):参数是正则表达式,且会忽略g标识

string.slice(start,end):复制string的一部分出来构造一个新的字符串。如果start/end是负数,会与string.length相加

string.split(separator,limit):separator可以是字符串也可以是正则,limit显示切片数量

string.substring(start,end):没有任何理由去使用substring方法,用slice代替

string.toLocaleLowerCase():返回一个新的字符串,使用本地化的规则把string中的所有字幕转换为小写格式。此方法主要永在土耳其语上,因为在土耳其语中‘I’转换为‘l’,而不是‘i’。

string.toLocaleUpperCase():转换大写格式,解释参照toLocaleLowerCase()

string.toLowerCase():

string.toUpperCase():

String.fromCharCode(char...):根据一串数字编码返回一个字符串  

var a = String.fromCharCode(67,97,116);//a是Cat

+∞

毒瘤

1.判断数字:var isNumber = function(num){return typeof num === 'number' && isFinite(num);}

2.判断是数组的可靠方法:

Object.prototype.toString.apply(arr) === '[object Array]'

Object.prototype.toString.apply(arguments) === '[object Arguments]'//可以判断arguments数组不是真正的数组,只是含有length属性而已,要通过Array.prototype.slice.apply(arguments)转成数组

澳门美高梅游戏 3

3.对象:

澳门美高梅游戏 4

澳门美高梅游戏 5

可以看到,constructor却是一个字符串,原因在于count对象继承自Object.prototype,而Object.prototype包含着一个名为constructor的成员对象它的值是一个Object,所以相加就变成了字符串拼接。解决办法是添加一个判断typeof count[word] == 'number'

正无穷

JSON

json有6种类型的值,对象,数组,字符串,数字,布尔值和null。空白(空格,制表,回车,换行符)可被插入到任意值的前后。

使用JSON.parse可以代替evel带来的风险

LN10

≈2.303

2 的自然对数

undefined

undefined

未定义

LN2

≈0.693

10的自然对数

LOG2E

≈1.443

e 的以2 为底的对数

LOG10E

≈0.434

e 的以10为底的对数

PI

≈3.142

圆周率,即圆周长与直径的比

SQRT1_2

≈0.707

2的平方根的倒数

SQRT2

≈1.414

2的平方根

注:Global对象中的常量可以使用名称直接访问,Math对象中的常量需使用类似Math.PI的形式来访问。

(3)内建静态方法:

所属对象

类别

方法

说明

Global

全局解析方法

eval(x)

解析Javascript字符串,eval中定义的变量不会提升,在严格模式下,外部不能访问eval内定义的变量

字符串解析为Number

parseInt(string,radix)

将字符串解析为整数,可以传入一个进制,会忽略前导空格

parseFloat(string)

将字符串解析为浮点数,会忽略前导的空格和前导0

Number判断方法

isNaN(number)

判断是否为数字

isFinite(number)

判断是否为有限数

URI处理方法

encodeURI(uri)

对URI编码,用于整个URI,用特殊的UTF-8编码替换所有无效字符,不会对本身属于URI的特殊字符编码,如冒号,正斜杠,问号,井号等。

decodeURI(ecodedURI)

对使用ecnodeURI()编码的字符串解码

encodeURIComponent(uriComponent)

对URI编码,用于URI中的某一段,会对发现的任何非标准字符进行解码

decodeURIComponent(encodedURIComponent)

对使用ecnodeURIComponent()编码的字符串解码

内建对象构造器方法

Object、Function、Array、String、Number、Boolean、Date、RegExp

Error、EvalError、RangeError、ReferenceError、SyntaxError、TypeError、URIError

这里每一个构造函数都构成了一个内建的对象类型

Math

三角函数

sin(x)、cos(x)、tan(x)

x的正弦、余弦、正切

反三角函数

asin(x)、acos(x)、atan(x)、atan2(y,x)

x的烦正弦、反余弦、反正切、y/x的反正切

舍入函数

ceil(x)、floor(x)、round(x)

向上舍入(大于该数的最小整数)、向下舍入(小于该数的最大整数)、四舍五入

最值函数

max([value1[value2[,...]]])、min([value1[,value2[,...]]])

最大值、最小值

随机函数

random()

返回介于0和1之间的随机数,不包括0和1.随机公式:随机值=Math.floor(Math.random() * 可能值的个数 + 初始值)

其它常见数学函数

abs(x)、exp(x)、log(x)、pow(x,y)、sqrt(x)

绝对值、Math.E的x次幂、x的自然对数、x的y次幂、x的平方根

JSON 

解析

parse(text[,reviver])

把JSON字符串解析外为Javascript值

序列化

stringify(value[,replacer[,space]])

把Javascript对象序列号为JSON字符串,默认情况下不包括空格和缩进,所有函数、原型成员以及值为undefined的属性会被忽略

说明:

(1)全局对象中还有escape()/unescape()方法,由于这两个方法只能正确编码ASCII字符已经被废弃,而使用上表中的encodeURI()等方法来替换。

(2)JSON.parse()可以接受一个可选的参数,这个参数是一个函数,被称为还原函数,还原函数返回一个值,接受两个参数:一个键和一个值。如果还原函数返回undefined,表示要从结果中删除相应的键,返回其他值,则将该值插入到结果中。

(3)JSON.stringify()可以接受二个可选参数:

  A、第一个可选参数是个过滤器,可以是一个数组,也可以是一个函数。如果是一个数组,那么结果中只保留这个数组中列出的属性;如果是一个函数,这个函数被称为替换函数,接受两个参数:一个键和一个值。替换函数返回undefined时会忽略这个键,否则就将返回值作为这个键的值插入到相应位置。

  B、第二个可选参数是个选项,表示是否在JSON字符串中保留缩进。如果这个参数是数字,表示每个级别缩进的空格数(最大不能超过10,超过10时自动设置为10),如果这个参数是字符串,则将作为缩进字符处理。

  在调用JSON.stringify(obj)时,如果obj中有toJSON()方法并返回一个有效值时,会首先调用这个方法。

2、Object与Function

  这两个内建对象在前面已经重点讨论过,这里总结一下:

编辑:美高梅集团 本文来源:那么字面量的值等于e之前的数字与10的e之后的数

关键词: