1.数值检测
1.isNaN 用来检测变量是否是一个数字 是数字返回false 否则返回true
2.isFinite 用来检测是否为有效数值
2.JS数字最值
console.log(Number.MIN_VALUE); //最小数
console.log(Number.MAX_VALUE); //最大数
3.null 和 undefined 关系
undefined派生自null
相等 会将数据类型转换为同一类型再去比较
console.log(null == undefined); //true
全等 先比较数据类型 数据类型不一致直接返回false
console.log(null == undefined); //false
4.深浅拷贝
深拷贝 拷贝值
浅拷贝 拷贝地址
5.算术运算符
+ - * / % 算术运算符
+ 右侧其他数据类型会转换为number进行计算 是字符串做字符串拼接
除了+号,其他字符都可以隐式将字符串转为数字运算
6.一元运算符 ! ++ -- delete + - typeof
+ 取正数
- 取负数
在其他数据类型前加+可以隐式将其他数据类型转换为number类型
console.log(+true,typeof +true);
字符串拼接 需要两个或者两个以上操作数
console.log(1 + 2 + 3 + '4');
递增 前++ 先自增 再赋值
var a = ++num;
递增 后++ 先赋值 再自增
var a = num++;
!取反
console.log(!null);//true
delete
可以删除对象属性 删除数组元素
var obj = {name:'zhangsan',age:12}
删除对象属性
delete obj.name;
console.log(obj);
数组元素可以是任意数据类型
arr[index] 访问数组元素 index下标 索引
var arr1 = [true,null,undefined,{name:'zhangsan'},10,function(){},Symbol('name')];
删除数组元素
delete arr1[5];
console.log(arr1)
6.隐式转换 +- * / % ==
+ 运算符 两个操作数有一个是字符串 就是字符串拼接
console.log(1 + '2');
- / * % 两个字符串有一个是其他数据类型 就是隐式转换为number进行运算
console.log(1 - undefined);
将其他数据类型转为number类型
console.log(+[],+null,+true,+false,+"",+'hello');
==
如果两个操作数 一个是数字 一个是字符串 隐式将字符串转为数字进行比较
如果两个操作数 一个是数字 一个是布尔值 隐式将布尔值转为数字进行比较
如果两个操作数 一个是布尔 一个是字符串 隐式将它两转成数字进行比较
引用数据类型隐式转换
将引用数据类型转换为原始值 基本数据类型
引用数据类型中的 toString() valueOf()
console.log([].toString(),[].valueOf(),typeof ([].toString()),typeof ([].valueOf()));//"" [] string obejct
console.log({}.toString(),{}.valueOf(),typeof ({}.toString()),typeof ({}.valueOf()));
console.log([] + [],typeof ([] + []),'转换1');//"" toString()
console.log([] + {},'转换2');//[object Object] // toString()
console.log({} + {},'转换3');//[object Object][object Object]
对于 console.log(obj.valueOf() +10);
默认调用toString() 若手动改成valueOf(),还会调用toString()
重写toString()和valueOf()
如果重写了toString()方法,调用toString()
如果重写了valueOf()方法,调用valueOf()
如果重写toString()和valueOf()方法,调用valueOf()方法
7.赋值运算符
+= -= *= /= %=
8.比较运算符
== 会将数据类型转换为同一类型再去比较
console.log(null == undefined); //true
=== 先比较数据类型 数据类型不一致直接返回false
console.log(null == undefined); //false
console.log([]=[]); false
console.log({}={}); false
console.log(![]=[]); true
!优先级高 ![]=false
右侧[]转为原始值 +[] =0
进行引用数据类型 == === 比较是一样的,只比较地址
!=
用法等同于==
!==
先比较数据类型 数据类型不一致直接返回true
> <
true转换为数值是1 false转换为数值是0
console.log(1 > true); // 结果为false
任何值和NaN作比较结果都是false
console.log(1 > 'hello'); // 结果为false 任何值和NaN作比较结果都是false
console.log(1 > '9/0'); //正无穷字符串/NAN和数字比较 false
正无穷数字 和数字比较 表达式成立true 表达式不成立false
console.log(1 < 9 / 0);
9.逻辑运算符 与 或 非
&& 同真才真 有假就假
如果两个操作数第一个是假的 返回第一个操作数 null '' NAN undefined 都是假的操作数
如果两个操作数第一个是真的 返回第二个操作数
console.log(null && 'hello');
并且 既满足前面表达式 又满足后面表达式
if (a >= 10 && b < 6) {console.log('满足条件');} else {console.log('不满足条件');}
|| 或者 有真就真
或者操作时 如果第一个操作数是假的 返回第二个操作数
如果第一个操作数是真的,返回第一个操作数
满足其中一个条件 就能进入条件语句
if (a < 10 || b > 3) {console.log('满足条件');}else {console.log('不满足条件');}
10.基本数据类型和引用数据变量的区别
1.基本数据类型的变量和值保存在栈区
2.引用数据类型变量和引用地址保存在栈区,内容保存在堆区
3.基本数据类型赋值时值传递,引用数据类型赋值就是引用地址的传递