数据类型转换
1. Number([value]) 把其他数据类型转换为number数据类型
字符串转数字:空字符串是0 如果字符串中出现任意一个非有效数字字符,结果都是NaN
布尔转换为数字: true ->1 false ->0
null ->0 undefefined-> NaN
symbol 值不能转换为数字 Uncaught TypeError: Cannot convert a Symbol value to a number
bigint 可以转换为数字
引用数据类型(对象或者函数)转换为数字:
1.首先获取它的[Symbol.toPrimitive]属性值
2.如果没有这个属性,其次获取它的ValueOf值(原始值)
3.如果还是没有原始值,最后把其转换为字符串 toString,然后再转换为数字 Number
2.parseInt/parseFloat([value]) 把其他数据类型转换为数字类型
需要保证[value]是一个字符串,如果不是则首先‘隐式’的把其他转换为字符串 [value].toString()
从字符串左侧第一个字符开始向右查找,把找到的有效数字字符最后转换为数字(遇到一个非有效数字字符则停止查找,不论后面是否还有有效数字字符,都不再找了)
如果一个有效数字字符都没找到,结果是NaN
[number value].toFixed([N]):保留小数点后面N位
- toExponential
- toPrecision
- ...
2.把其他数据类型转换为字符串类型[value.toString() / String(value)]
基本上都是用双引号或者单引号包起来即可
数组转换为字符串,是把数组中的每一项用逗号分隔
对于普通对象来讲,转换为字符串的时候,不论对象中包含哪些信息,结果都是"[object object]"
...
JS中的数据运算符
"=" "*" "/"
"%" 取余数(模)
"+" 它在JS中比较的特殊,除了常规的数学运算,有时候属于字符串拼接
“+” 加号的字符串拼接
加号的“左右两边”,有一边出现字符串,结果就是字符串拼接
加号的"左右两边",有一边出现对象(目的是把对象转换为数字,进行数学运算)
首先会获取对象的[Symbol.toPrimitive]或者valueOf
如果上述都没有获取原始值,则基于toString把对象转换为字符串
此时出现问题"+左右两边,有一边出现字符串了"此时就不再是数学运算,而是字符串拼接了
加号只出现一边,这样这一边即使是字符串/对象,也是数学运算
如果是一个"{}"加内容,"{}"不参与运算,只是相当于一个代码块
`
var s = "10";
console.log(+"10"); //10
console.log(+[10]); //10
console.log(s++); // 10
console.log(s) // 11
{} + 10 // 10 前面当作了代码块不参与运算,只处理了+10
// 这两种都是正常运算
({}+10) //["object object"]10
10 + {} //10["object object"]
`
console.log(10 + '10'); //'1010' 字符串拼接
console.log(10 - '10'); //0 数学运算
console.log(10 + [10,20]);
// [10, 20][Symbol.toPrimitive] undefined
// [10, 20].valueOf() [10,20]不是原始值
// [10,20].toString() "10,20"
// --- 此时
// 10 + "10,20" 这是字符串拼接了
// => "1010,20"
console.log(10 + {}); //"10[object Object]"
console.log(10 + new Number(10));
new Number(10)也是一个对象
new Number(10)[Symbol.toPrimitive] undefined
new Number(10).valueOf() 10
10+10 => 20
字符串有很多能调用的方法
- charAt
- charCodeAt
- substr
- substring
- slice
- split
- replace
- indexOf / lastIndexOf
- includes
- trim
- match
- ... `var str = "zhufengpeixun";
str.substr(n,m); 从索引n开始截取m个字符
console.log(2,4);//"ufen"
str.substring(n,m); 从索引n开始找到索引m处(不含m),把找到的结果截取一下
console.log(2,4);//"uf"
m不写都是截取到字符串末尾
都不支持负数索引,而slice是支持的(剩下的语法和substring一样)`
3.把其他数据类型值转换为布尔类型 Boolean([value]) / !![value]
只有"0、NaN、空字符串、null undefined"变为布尔的false,其余都是true
条件判断
if(10) {
首先会把10转换为布尔类型,然后验证真假,决定条件是否成立
}
![value]:把value转换为布尔类型,然后取反