弱类型:可以改变变量值和对象类型
强类型:可以改变变量值不能改变对象类型
解释型:边编译边执行,速度慢。解释型一般是弱类型
编译型:先编译再执行(C++\Java),速度快。编译型一般是强类型
解释型弱类型的脚本语言。
任何类型加字符串或者对象(不包括undefined和null)相加,都变成字符串,空数组做加法运算时转换成空串
对象转成字符为object Object,数组[1,2,3]转换成字符串为‘1,2,3‘
如果没有字符类型或者undefined和null之外的对象类型,其他类型加法转换成数值进行运算
任何类型的减法运算都转换成数值运算
任何关系运算符都有返回值
字符字母和字符字母比较:按顺序一一比较单个字母的ascll码值
字符字母和数字比较:false,相当于和NaN比较,这里‘4a‘也是NaN,而非按照parseInt转换成4
字符数字和数字比较:字符数字转换成数值再比较,而非ascll码
空数组==空字符串==0是true , 空数组!== 0
0 == false,‘‘ == 0, ‘‘ == false
对象与对象的比较判断的是引用地址,地址不同的对象为false
特殊情况:undefined == null 是true
[] == [] , 是false,因为是两个不同的对象
if(a == null)为真,那么a只能为null或者undefined
if(a == 0)为真, 那么a只能为0或’‘或false
[] == ‘‘ 为true,[]没办法转换成布尔值,会转换成空串
[1,2,3] = ‘1,2,3‘是true,数组会转成字符串
数组与其他非对象类型比较时都会转换成字符串
数组中如何包含对象,转成字符串对象是object Object
&&:
左右为true才为true
左true,则一定返回右
左false返回左,不进行右侧运算
|| :
左右都为false才为false
如果左为true,直接返回左边,不进行右边的判断
如果左为false,则一定返回右边
var a = 1; a = --a || ++a;// 左边是false,看右边,右边是true,返回右边左边已经进行了运算 console.log(a);
原文:https://www.cnblogs.com/ltfxy/p/12115849.html