wheatup

Results 18 comments of wheatup

`Number.isNaN` (不同于`isNaN`) 可以判断一个值是否是 `NaN` ```javascript Number.isNaN(n); ```

```javascript +true // 1 +false // 0 ```

简单的说来,表达式(Expression)是语句(Statement)的子集,表达式一定会返回一个值,而语句不会。 比如定义变量、返回语句都属于语句,而逻辑判断、方法调用、赋值都属于表达式。 支持语句的地方都支持表达式,而只支持表达式的地方不支持语句。 表达式: > const foo = 'foo' > return foo 语句: > foo = 'foo' > foo > bar > foo() --- 如果你在仅支持表达式的位置写语句,则会报错,举个例子: For循环的格式为: > for( `语句`, `表达式`,...

> > ```js > > function isNativeFunc (func) { // 判断函数是否为运行时环境的内置函数 > > return /[native code]/.test(func) > > } > > ``` > > 你这个正则不对,`[`应该使用`\`转义`/\[native code\]/.test(func)` 哪怕正则对了,我方法里只要包含这个字符串就被判定为内置函数了,是不是有点怪……

可以利用正则: ```javascript 'aabbaaaaccdeee'.replace(/(.)\1*/g, '$1'); // abacde ```

现在js代码的编译和执行都是混合了JIT的解释器和编译器两种模式,起初在执行一段代码的时候都是边解释边执行,这种模式在执行普通的代码时候效率更高,因为不需要进行预编译就可以直接运行代码。 但是当遇到大量的循环的时候,这种模式效率就会变得低下,因为每次循环的结果几乎都是一定的,但是解释器会不停地把时间浪费在类型检查和行为决策上。 当一行代码重复了很多次,并且每次行为都是一致的时候,JS引擎就会单独把这段代码丢进编译器(基线编译器)进行编译,编译过的代码效率会更高。 而当这段代码重复了太多次(~>10000次)后,JS引擎会再次将这段代码进行优化编译(优化编译器),从而绕过所有的类型检查和行为决策,直接假设性的做出类型判断然后执行,这种行为非常高效,但也很危险,所以JS会在执行前验证自己的假设,如果假设不合理,则将这段代码丢弃而回到基线编译器或者解释器执行,这反而会浪费大量时间。 --- 所以在进行大量循环的时候,为了保证优化编译器能正常启动,必须保证**每次循环的类型一致**,不能前10000条数据的`num`是数字,结果第10001条数据的`num`是字符串,这在TypeScript里可以很好地保证这一点。 *曾经也有人利用优化编译器的这一特性,利用BUG绕过了类型检查,从而让JS将object当成number输出,导致对象内存地址暴露甚至可以随意篡改,有兴趣的可以看看:[WebKit-RegEx-Exploit](https://github.com/LinusHenze/WebKit-RegEx-Exploit)*

那只是前端测试功能,还没连服务器和数据库呢,正式发布之前请勿使用

> > http://share.fpv.im/tucao.crx > > 蛋友 ColtIsGayGay 发的,怎么样,能用不? > > 我这边安装不了,说是停用的扩展程序 > > 打开开发者模式,然后拖进去,不行的话就改扩展名 zip 解压,然后把文件夹丢到扩展管理页面 其实我觉得利用那个API可以,类似以前的多说。 不过最好美化并且自定一下css以便契合目前煎蛋的风格,如果可以上架谷歌商城就更好了

> 所以怎么说, 这个还做吗? 先入为主的话,这个先暂停看情况吧,重新开发肯定没直接用现成的api快