一、 JavaScript 引擎是单线程模拟多线程,有一个轮转时间片,短时间之内轮流执行多个任务的片段。
js 单线程模拟多线程的过程:
1.任务一 任务二
2.切分任务一 任务二
3.随机排列这些任务片段,组成队列
4.按照这个队列顺序将任务片段送进JS进程
5.JS线程执行一个又一个的任务片段
中间轮转的毫秒或者微妙的卡顿是看不到的
二、JS的值
- 原始值(基本类型)有Number String Boolean undefined null 布尔值
null 空值 初始化组件 函数 销毁函数 占位。undefined 是未被定义。null 是空值。
- 五种比较常用的引用值 object array function date RegExp
三、JS内存之栈内存(Stack)与堆内存(Heap)
原始值在栈内存中,先进后出,原始值在栈内存中,不可改,当重新给一个变量赋值时,会重新开辟一个空间存这个新的值,而原来的值还存在栈内存中,只不过变量的指针(地址)指向新开辟的空间。
引用值的地址(指针)存在栈内存,值并不是存在栈内存,而是存在堆内存中,把 arr1 赋值给 arr2 ,其实是指向同一块堆内存。栈内存会存储堆内存的地址。当arr1 重新赋值了就跟原先的值没有关系了。
四、引用值中的数组与对象初识
image.png五、基本运算操作符
权重:括号运算符 > 普通运算符 > 赋值
var a = '123', b = 456, c = 'dfg'
console.log(a + b); //字符串拼接 123456
console.log(a * b); //123*456 56088
console.log(a / b); // 123/456
console.log(a + c); //字符串拼接
console.log(a * c); // NaN
console.log(a / c); // NaN
console.log('_______________');
var arr2 = [1, 2, 3], arr3 = [7, 8, 9]
console.log(arr2 + arr3); //1,2,37,8,9
console.log(arr2 - arr3); // NaN
console.log(arr2 * arr3); // NaN
console.log(arr2 / arr3); // NaN
ass = 'qwe' + 1 + 1
console.log(ass); //qwe11
六、基本运算操作符
console.log(1 / 0); //Infinity 正无穷
console.log(-1 / 0); //-Infinity 负无穷
console.log(0 % 6); //0
console.log(2 % 6); //2
var a = 4, b;
b = 1 + a++; //a++ 先赋值 再加
console.log(b, a); //5 5
console.log(a); //5
var c = 2, d;
d = 3 + ++c; //++c 先加 再赋值
console.log(d, c); //6 3
console.log(c);
var q = 8, w;
w = q-- + --q // w = --q + --q
console.log(w, q); //14 6
七、比较运算符
// > < >= <= == === != !==
// 数字和字符串比较:字符串转换成数字再进行比较
var a = 1 > '123'
console.log(a); //false 1>123
// 字符串对比:字符串相对应的ASCII码(字符相对应的十进制代码)
// 多个字符的,从左到右依次对比,直到比较出ASCII码的大小为止。
var b = '1.25' > '12'
console.log(b); //false
// 相等不看数据类型
// 全等是值和数据类型
var c = NaN == NaN
console.log(c); //false NaN 与包括自己在内任何东西都不相等
八、逻辑运算符
// 与&& 或|| 非!
//除 undefined, null, NaN, "", 0, false 外都是真
var a = 1 && 2
// 遇到真就往后走
console.log(a); //2
var b = 1 && 2 && undefined && 5
// 遇到假或走到最后就返回当前的值
console.log(b); //undefined
var c = 1 || 2
// 遇到假就往后走,遇到真或者走到最后就返回当前的值。
console.log(c); //1
var d = 0 || null || 1 || 0
console.log(d); //1
var name = ''
console.log(name || '未找到数据');//未找到数据
a.onclick = function (e) {
// ie 浏览器 的点击事件存在 window.event
// 其他的就村存在 e 中
var event = e || window.event
}
var ee = !1
console.log(ee); //false
网友评论