当前位置: 首页 > 科技观察

几个你可能不知道的JavaScriptNative方法

时间:2023-03-18 22:07:46 科技观察

自ES6发布以来,新的JavaScript标准中加入了许多新的、方便的native方法。但是,我在GitHub存储库中看到了很多旧代码。这并不意味着它们一定不好,但我要介绍的功能将帮助您的代码更具可读性和更漂亮。Number.isNaN与isNaNNaN是数字类型。typeofNaN==='number'//true所以不能区分NaN和数字。即使是Object.prototype.toString.call也会为NaN和数字返回[objectNumber]。您可能已经知道可以使用isNaN方法检查参数是否为NaN。但是从ES6开始,数字构造函数开始使用isNaN作为它的方法。那么有什么区别呢?isNaN-检查传递的值是否为数字或无法转换为数字。Number.isNaN-检查传递的值是否不是数字。下面是例子。Number.isNaN({});//<-false,{}isnotNaNNNumber.isNaN('ponyfoo')//<-false,'ponyfoo'isnotNaNNNumber.isNaN(NaN)//<-true,NaNisNaNNNumber.isNaN('pony'/'foo')//<-true,'pony'/'foo'isNaN,NaNisNaNisNaN({});//<-true,{}isnotanumberisNaN('ponyfoo')//<-true,'ponyfoo'isnotanumberisNaN(NaN)//<-true,NaNisnotanumberisNaN('pony'/'foo')//<-true,'pony'/'foo'isNaN,NaNisnotanumberNumber.isFinitevs.JavaScript中的isFinite,比如1/0等计算不会产生错误。相反,它给你Infinit,这是一个全局属性。那么,如何检查一个值是否为Infinit?你不能,但你可以使用isFinite和Number.isFinite来检查一个值是否是有限的。它们的工作原理基本相同,但彼此略有不同。isFinite-检查传递的值是否有限。如果传递值的类型不是数字,则将其转换为数字。Number.isFinite-检查传递的值是否有限。传递的值不会转换为数字。示例:Number.isFinite(Infinity)//falseisFinite(Infinity)//falseNumber.isFinite(NaN)//falseFinite(NaN)//falseNumber.isFinite(2e64)//trueNumber.isFinite(2e64)//trueNumber.isFinite(undefined)//falseisFinite(undefined)//falseNumber.isFinite(null)//falseisFinite(null)//trueNumber.isFinite('0')//falseisFinite('0')//trueMath.floorvs.Math.trunc中过去,当您需要对数字进行舍入时,您可能会使用Math.floor。但从现在开始,如果您真正想要的只是整数部分,请尝试Math.trunc。Math.floor-返回小于或等于给定数字的最大整数。Math.trunc-截断点和右边的数字。基本上,如果给定的数字是正数,他们会返回完全相同的结果。但是,如果给定的数字是负数,结果将不同。Math.floor(1.23)//1Math.trunc(1.23)//1Math.floor(-5.3)//-6Math.trunc(-5.3)//-5Math.floor(-0.1)//-1Math.trunc(-0.1)//-0Array.prototype.indexOfvs.Array.prototype.includes当你在给定数组中寻找一个值时,你是如何找到它的?我见过很多开发者使用Array.prototype.indexOf,如下例所示。constarr=[1,2,3,4];if(arr.indexOf(1)>-1){...}它们的区别如下:Array.prototype.indexOf——返回给定的可以找到的元素在数组中的第一个索引;如果不存在,则返回-1Array.prototype.includes-检查给定数组是否包含您要查找的特定值并返回true/false作为结果示例:conststudents=['Hong','James','Mark','James'];students.indexOf('Mark')//1students.includes('James')//truestudents.indexOf('Sam')//-1students.includes('Sam')//false当心!由于Unicode差异,传递的值区分大小写。String.prototype.repeat与手动循环在添加此功能之前,您创建字符串的方式是复制字符串,比如abcabcabc,然后根据需要将它们连接成一个空字符串,次数不限。varstr='abc';varres='';varcopyTimes=3;for(vari=0;i