<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<script>
// 其他数据类型自动转化为数值类型
// 在进行 非加法 算术运算时 其他数据类型类型会自动转化为数值类型
// 加法 如果有字符串参与 会执行 字符串拼接
// 如果 加法 是 非字符串的其他数类型,也会自动转化为数值类型
// 总之,你要注意 + 加法 和 字符串的问题
// 任何有 NaN参与的运算,结果都是NaN
// 转化原则
// 布尔类型 true ---> 1
// 布尔类型 false ---> 0
// null ---> 0
// undefined ---> NaN 只要有undefined参与的运算,结果都是NaN
// 字符串 特别注意,如果是+加号,是字符串拼接操作
// 情况1 : 符合数字规范的字符串 纯数字字符串,科学计数法字符串
// 可以 转换为对应数值的字符串
// 转化为对应的字符串内容
// 字符串中,可以带有符号,会转化为相应的负数来参与运算
// 情况2 : 不符合数字规范的字符串 有其他不符合数字规范的内容
// 统统转化为 NaN 运算结果也是 NaN
// 三种特殊情况
// 数组,对象,函数
// 如果是 + 加法,执行字符串拼接操作,转化原则,参看字符串拼接转化原则
// 如果是 其他运算形式 统统转化为 NaN 执行结果也是NaN
// 布尔类型true 转化为1
var int1 = 100 - true;
console.log(int1);
// 布尔类型false 转化为0
var int2 = 100 - false;
console.log(int2);
// null 转化为0
var int3 = 200 - null;
console.log(int3);
// undefined 转化为 NaN
// 任何有NaN参数与的运算,结果都是NaN
var int4 = 200 - undefined;
console.log(int4);
// 字符串情况1,符合数字规范的字符串
// 转化为数值 -100 参与运算
var int5 = 100 - '-100';
console.log(int5);
// 字符串情况1,符合数字规范的字符串
// 转化为浮点数 100.123
// 计算结果,要考虑有可能出现误差/精度丢失效果
var int6 = 100 - '100.123';
console.log(int6);
// 字符串情况1,符合数字规范的字符串
// 2e3转化为数值 2000,参与运算
var int7 = 100 - '2e3';
console.log(int7);
// 字符串情况2,有不符合数字规范的内容
var int8 = 100 - '北京';
var int9 = 100 - '100北京';
var int10 = 100 - '北京100';
var int11 = 100 - '2e3北京';
var int12 = 100 - '北京2e3';
console.log(int8);
console.log(int9);
console.log(int10);
console.log(int11);
console.log(int12);
// 特殊情况
// 数组
var arr = [1,2,3,4,5];
var int13 = 100 + arr;
var int14 = 100 - arr;
console.log(int13);
console.log(int14);
// 对象
var obj = {name:'张三'};
var int15 = 100 + obj;
var int16 = 100 - obj;
console.log(int15);
console.log(int16);
// 函数
function fun(){
console.log(123);
}
var int17 = 100 + fun;
var int18 = 100 - fun;
console.log(int17);
console.log(int18);
</script>
</body>
</html>