-
JS模拟多线程
轮转时间片:短时间内轮流执行多个任务的片段
a. 任务1 任务2
b. 切分任务1 任务2
c. 随机排列这些任务片段,组成队列
d. 按照这个队列顺序将任务片段送进JS进程
e. JS线程执行一个又一个的任务片段 -
script执行需注意
只会运行外部引用,内部不再执行
<script type="text/javascript" src="js/index.js">
document.write('bababa');
</script>
都可以执行
若有错误,互相也不影响运行
<script type="text/javascript">
document.write('bababa1');
</script>
<script type="text/javascript">
document.write('bababa2');
</script>
写错不会执行,可故意写错用作模板
<script type="text/tpl">
<tr>
<td>{{id}}</td>
<td>{{name}}</td>
<td>{{price}}</td>
</tr>
</script>
- JS的值
原始值 | 引用值 |
---|---|
Number string boolean undefined null | object (array function data RegExp) |
栈-先进后出 若重新赋值,是重新开辟内存指向更改,原内存地址里的值不是直接修改的 | 地址存在栈内存,值存在堆内 |
- 0 / 0 === NaN
- 1 / 0 === Infinity
- -1 / 0 === -Infinity
- “a” / “b” === NaN
- NaN / NaN === NaN
- NaN != NaN 与任何都不相等,比大小也一直false
- 若实在要比较NaN,可以NaN + ‘’ === ‘NaN’
- undefined null NaN “” 0 false都为假,Boolean()方法出来都是false,但只有后三个 == false 和 == 0
- typeof null 为object的原因是,历史遗留问题,一开始null是代表空对象
- {} !== {} 因为对象地址不同,若要相同可以obj = {}; obj1 = obj;
- 显式类型转换
Number()方法 | parseInt()方法 | parseFloat()方法 |
---|---|---|
数字字符串、Boolean、null可以,其他都是NaN | 向下取整,字符串从头开始返回数字,可传第二个参数进制数 parseInt(10, 16) = 16,radix 2-36 超过了的话NaN | toFixed() 输出四舍五入,字符串类型 |
- 隐式类型转换
- 数字与字符串比较大小,字符串先转化为数字
- 两个字符串比较大小,一位位比较Ascii码:数字 < 大写字母 < 小写字母
- undefined == null true 并且两者与0比较都一直是false
- 任何数据类型的值 + 字符串 = 字符串
- 减乘除模都会转换成number进行运算,没有字符串的加也会转为number
- a++ 会进行Number
- +a -a会直接Number方法
- isNaN 会进行Number
栗子:
typeof a && (-true) + (+undefined) + '' // 'NaN'
//'undefined' -1 NaN
if (1 + 5 * '3' === 16) console.log(1); // 1
else console.log(0);
console.log(!!' ' + !!'' - !!false || '通过'); // 1