当前位置: 首页 > Web前端 > HTML

说说JavaScript中你不知道的知识点

时间:2023-03-28 00:32:56 HTML

1。在前端开发的过程中,我们总会遇到一些困惑。下面分享一下我的理解,希望对你有所帮助。2.关于null你所不知道的点:来自JavaScript高级程序设计第4版3.来自0.3的疑惑:来自JavaScript高级程序设计第4版4.一元运算符在不同数据类型上的表现:lets1='01';lets2='1.1';设s3='z';设b=false;设f=1.1;设o={valueOf(){返回-1;}}s1=+s1;//值变成一个值1s2=+s2;//值变成一个值1.1b=+b;//值变成树值0f=+f;//没有变化,仍然是1.1o=+o;//值变化变成值-1/**一元减号用减号(-)表示,放在变量前面,主要用来把值变成负值,*比如把1变成-1**/letnum=25;num=-num;console.log(num);//-25/**对一个值使用一元减号会将其变成相应的负值(如上例所示)*当应用于非数字值时,一元减号将遵循与一元加号相同的规则,首先*转换它们,然后取负值:**/lets1='0.1';lets2='1.1';lets3='z';letb=false;letf=1.1;leto={valueOf(){返回-1;}}s1=-s1;//value变成value-1s2=-s2;//value变成value-1.1s3=-s3;//Value变成NaNb=-b;//value变成numeric0f=-f;//value变成-1.1o=-o;//value变成numeric1/**一元加减运算符主要用于基本的算术运算,但也可以像上面的例子一样用于数据类型转换。**/5。判断是否为整数:isInteger()方法和安全整数ES6增加了Number.isInteger()方法来判断一个值是否存储为整数。有时,小数位的0可能会让人认为该值是一个浮点值:console.log(Number.isInteger(1));//trueconsole.log(Number.isInteger(1.00));//trueconsole.log(Number.isInteger(1.01));//错误6。提取字符串的方法:slice()、substr()和substring()。所有这三个方法都返回调用它们的字符串的子字符串,并且都接收一个或两个参数。第一个参数表示子串开始的位置,第二个参数表示子串结束的位置。对于slice()和substring(),第二个参数是提取结束的位置(即提取该位置之前的字符)。对于substr(),第二个参数表示要返回的子串数。在任何情况下,省略第二个参数都意味着提取到字符串的末尾。和concat()方法一样,slice()、substr()、substring()不会修改调用它们的字符串,只会返回提取出来的原始新字符串值6-1。例子如下:letstringValue="helloworld";console.log(stringValue.slice(3));//“loworld”console.log(stringValue.substring(3));//“loworld”console.log(stringValue.substr(3));//“loworld”console.log(stringValue.slice(3,7));//“低”console.log(stringValue.substring(3,7));//“低”控制台.log(stringValue.substr(3,7));//"loworl"在这个例子中,slice()、substr()和substring()的调用方式是一样的,大多数情况下返回的值也是一样的。如果只传入一个参数3,所有方法都会返回"loworld",因为"hello"中的"l"位置是3。如果传入两个参数3和7,slice()和substring()返回"lowworld""(因为"world"中的"o"在位置7,不包括在内),而substr()返回"loworl",因为第二个参数表示返回给它的字符数。当参数之一为负时,这三种方法的行为不同。例如,slice()方法将所有负参数视为字符串的长度加上负参数值。6-2。示例如下2:substr()方法将第一个负参数值视为字符串加上该值的长度,将第二个负参数值转为0。substring()方法将所有负参数值转为0为0。请参见以下示例:letstringValue="helloworld";console.log(stringValue.slice(-3));//"rld"console.log(stringValue.substring(-3));//“你好世界”console.log(stringValue.substr(-3));//"rld"console.log(stringValue.slice(3,-4));//“低”console.log(stringValue.substring(3,-4));//"hel"console.log(stringValue.substr(3,-4));//""(空字符串)这个例子清楚地展示了3种方法之间的区别。当负参数传递给slice()和substr()时,它们返回相同的结果。这是因为-3被转换为8(长度加上负参数),有效地调用了slice(8)和substr(8)。而substring()方法返回整个字符串,因为-3被转换为0。当第二个参数为负数时,这3个方法不同。slice()方法将第二个参数转换为7,有效地调用slice(3,7),从而返回“low”。substring()方法会将第二个参数转换为0,相当于调用substring(3,0),相当于调用substring(0,3)。这是因为这个方法会以较小的参数作为起点,而将较大的参数作为终点。对于substr(),第二个参数被转换为0,这意味着返回的字符串包含零个字符,因此返回一个空字符串。7.trim()方法该方法会创建一个字符串副本,去掉前后所有空格,并返回结果:lettrimmedStringValue=stringValue.trim();控制台日志(字符串值);//“你好世界”console.log(trimmedStringValue);//"helloworld"由于trim()返回字符串的副本,因此不会影响原始字符串,即会保留原始的前导和尾随空格。此外,trimLeft()和trimRight()方法分别用于删除字符串开头和结尾的空格。8.repeat()方法提供对所有字符串的repeat()方法。该方法接受一个整数参数,指示复制字符串的次数,然后在连接所有副本后返回结果。让stringValue="na";console.log(stringValue.repeat(16)+“蝙蝠侠”);//nananananananananananananananananananananabatman9.ES6new用于创建数组的静态方法:from()和of()from()用于将类数组结构转换为数组实例;而of()用于将一组参数转换为数组实例的第一个参数Array.from()是一个类数组对象,即任何可迭代结构,或具有长度属性和可索引元素的结构。这个方法可以用在很多场合9-1。Thestringissplitintoanarray//Thestringwillbesplitintoasinglecharacterarrayconsole.log(Array.from("Matt"));//["M","a","t","t"]9-2.from()将集合和映射转换为一个新数组//你可以使用from()将集合和映射转换为一个新数组arrayconstm=newMap().set(1,2).set(3,4);consts=newSet().add(1).add(2).add(3).add(4);console.log(Array.from(m));//[[1,2],[3,4]]console.log(Array.from(s));//[1,2,3,4]9-3.数组。from()执行现有数组的浅拷贝//Array.from()执行现有数组的浅拷贝consta1=[1,2,3,4];consta2=Array.from(a1);控制台日志(a1);//[1,2,3,4]警报(a1===a2);//false9-4.from()也可以转换自定义对象constarrayLikeObject={0:1,1:2,2:3,3:4,length:4};console.log(Array.from(arrayLikeObject));//[1,2,3,4]9-5.Array.from()还接收第二个可选的映射器函数参数。该函数可以直接提升新数组的值,而无需像调用Array.from().map()那样先创建一个中间数组。还可以接收第三个可选参数,指定映射函数中this的值。但是这个重写的this值在箭头函数中不起作用。consta1=[1,2,3,4];consta2=Array.from(a1,x=>x**2);consta3=Array.from(a1,function(x){returnx**this.exponent},{exponent:2});控制台日志(a2);//[1,4,9,16]console.log(a3);//[1,4,9,16]Array.of()可以将一组参数转换成一个数组。此方法用于替换ES6之前常用的Array.prototype.slice.call(arguments),一种异常笨拙的将arguments对象转换为数组的方法:console.log(Array.of(1,2,3,4));//[1,2,3,4]console.log(Array.of(undefined));//[undefined]10.迭代方法ECMAScript为数组定义了5种迭代方法。每个方法都接收两个参数:在每个项目上运行的函数,以及一个可选的作用域对象,它充当函数运行的上下文(影响函数内部this的值)。传递给每个方法的函数接收3个参数:数组元素、元素索引和数组本身。根据具体的方法,这个函数的执行结果可能会也可能不会影响方法every()的返回值:对数组的每一项运行传入的函数,如果函数对每一项都返回true,那么这个方法返回真。filter():对数组的每一项运行传入函数,函数返回true的项将组成一个数组并返回。forEach():对数组的每一项运行传入函数,没有返回值。map():对数组中的每一项运行传递的函数,返回一个由每个函数调用的结果组成的数组。some():对数组的每一项运行传入函数,如果其中一个函数返回真,则返回真。10-1。对于every(),传入的函数在返回true之前必须为每一项都返回true;否则,它返回false。让数字=[1,2,3,4,5,4,3,2,1];让everyResult=numbers.every((item,index,array)=>item>2);警报(每个结果);//假10-2。对于some()来说,只要有一项让传递的函数返回true,它就会返回true。让someResult=numbers.some((item,index,array)=>item>2);警报(一些结果);//true10-3.filter()方法。该方法根据给定的函数决定一个项目是否应该包含在它返回的数组中//要返回一个所有值都大于2的数组letnumbers=[1,2,3,4,5,4,3,2,1];letfilterResult=numbers.filter((item,index,array)=>item>2);警报(过滤结果);//3,4,5,4,311。对象迭代是JavaScript中有史以来最大的部分时间,迭代对象属性是一个挑战。ECMAScript2017添加了两个静态方法,用于将对象的内容转换为序列化(更重要的是,可迭代)格式。Object.values()和Object.entries()两个静态方法接收一个对象并返回一个包含其内容的数组Object.values()返回一个包含对象值的数组consto={foo:'bar',baz:1,qux:{}};console.log(Object.values(o));//["bar",1,{}]Object.entries()返回键/值对数组consto={foo:'bar',baz:1,qux:{}};console.log(Object.entries((o)));//[["foo","bar"],["baz",1],["qux",{}]]请注意,非字符串属性将转换为字符串输出。此外,这两种方法执行了100,000个对象的浅拷贝。这个问题的分享到这里就结束了。希望能对您有所帮助,让我们携手共进,勇攀高峰。