/* 当系统没有Math.sign的时候;使用这个
判断一个数是正数还是负数,返回1或者-1 或者0 或者-0 或者 NaN */
if (!Math.sign) {
Math.sign = function (x) {
/*
加号运算符(+)将把一个字符串转换成一个数字。该运算符将被放在操作数之前。
const quantity = "12";
console.log(+quantity);
我们还可以使用加号(+)将字符串转换为浮点数。
const quantity = "12.99";
console.log(+quantity);
如果字符串值不能被转换为数字,那么结果将是 NaN。
const quantity = "awesome";
console.log(+quantity);
*/
/* 区分 +0 和 -0 在解决一些特定的数学问题时是必要的,
但是大部分情况下我们并不用关心。严格相等认为这两个值是全等的。 */
x = +x; // convert to a number
/* isNaN() 函数用于检查其参数是否是非数字值。
假如是0 或者 非数字 的时候,返回对应的 0 或者对应的非数字值。 */
if (x === 0 || isNaN(x)) {
return x;
}
/* 大于0的时候,返回1 */
return x > 0 ? 1 : -1;
};
}
/* 此函数返回数字以 2 为底的对数值 */
if (!Math.log2) {
Math.log2 = function (x) {
/* Math.log 方法可返回一个数的自然对数(基于E)。
Math.LOG2E是JavaScript中的一个属性,仅用于查找e的以2为底的对数的值,
其中e是大约等于2.718的无理数和超越数。
*/
return Math.log(x) * Math.LOG2E;
};
}
/*
isInteger() 函数用于检测指定参数是否为整数,如果是整数返回 true,否则返回 false。
*/
if (!Number.isInteger) {
Number.isInteger = function (value) {
/* isFinite() 函数用于检查其参数是否是无穷大,
也可以理解为是否为一个有限数值(finite number)。
如果参数是 NaN,正无穷大或者负无穷大,会返回 false,其他返回 true。
*/
return typeof value === 'number' && isFinite(value) && Math.floor(value) === value;
};
}
/*
CC_JSB 来判断是否为 native 环境(模拟器)-官方引擎回复
* Running in native platforms (mobile app, desktop app, or simulator).
* CC_JSB-判断,在本机平台(移动应用程序、桌面应用程序或模拟器)上运行
*/
/* CC_RUNTIME-在runtime环境下运行
Running in runtime environments.
运行环境(英语:Runtime environment,又称“运行期系统”,run-time system)
,指一种把半编译的运行码在目标机器上运行的环境。
运行环境是一种介乎编译器及直译器的运行方式。Java运行环境,
称之为“Java Runtime Environment”(JRE)。
*/
/*
不存在console.time的时候
console.time和console.timeEnd这两个方法可以用来让WEB开发人员测量一个javascript脚本程序执行消耗的时间。随着WEB应用越来越重要,JavaScript的执行性能也日益受到重视,WEB开发人员知道一些性能测试机器是必须的。今天要介绍的console.time和console.timeEnd就是其中之一。
console.time方法是开始计算时间,console.timeEnd是停止计时,输出脚本执行的时间。
// 启动计时器
console.time('testForEach');
// (写一些测试用代码)
// 停止计时,输出时间
console.timeEnd('testForEach');
// 4522.303ms
这两个方法中都可以传人一个参数,作为计时器的名称,它的作用是在代码并行运行时分清楚各个计时器。对console.timeEnd的调用会立即输出执行总共消耗的时间,单位是毫秒。
测试JavaScript性能的方法有很多,但console.time/timeEnd两个方法是最基本、最直接的技巧。
*/
if (CC_JSB || CC_RUNTIME || !console.time) {
/* Performance API用于精确度量、控制、增强浏览器的性能表现。
这个API为测量网站性能,提供以前没有办法做到的精度。
*/
var Timer = window.performance || Date;
/* 创建一个object */
var _timerTable = Object.create(null);
console.time = function (label) {
/* 创建一个存储当前时间 */
_timerTable[label] = Timer.now();
};
console.timeEnd = function (label) {
/* 计算时间差 */
/* 根据key,获取记录的start时间 */
/* 根据key,获取当前时间减去记录的start时间,获取时间差-毫秒 */
var startTime = _timerTable[label];
var duration = Timer.now() - startTime;
console.log(`${label}: ${duration}ms`);
};
}