第一章:typeof 返回数据类型,有六种:number
, string
, boolean
, object, undefined, function.
const a = 11;
console.log(typeof (a)); //返回number
const b = "11";
console.log(typeof (b)); //返回string
const d = true;
console.log(typeof (d)); //返回boolean
{}, [], 都返回object
const c = {};
console.log(typeof (c)); //返回object
const e = [];
console.log(typeof (e)); //返回object
null 返回object.虽然null原始值是1,但在最原始的时候它是用来代替空对象来占位
const f = null;
console.log(typeof (f)); // 返回object
--------------------------------分割线-------------------------------
第二章: js的类型转换功能(其他语言没有这个功能)
一、显示类型转换
1.Number(mix)
let demo = '123';
let num = Number(demo);
console.log(typeof (num) + ":" + num); //number:123
let demo = true;
let num = Number(demo);
console.log(typeof (num) + ":" + num); // number:1
let demo = "a";
let num = Number(demo);
console.log(typeof (num) + ":" + num); // number:NaN
// a明显不是一个数字。
2.parseInt(string, radix), radix表示基底。将值转换成整型的数
看到非数字位时截至
let demo = "123.45";
let num = parseInt(demo);
console.log(typeof (num) + ":" + num); // number:123
let demo = "123b.45abc";
let num = parseInt(demo);
console.log(typeof (num) + ":" + num); // number:123
let demo = true;
let num = parseInt(demo);
console.log(typeof (num) + ":" + num); // number:NaN
let demo = "10";
let num = parseInt(demo, 16);
console.log(typeof (num) + ":" + num); // number:16
// 这里的radix为16,表示10是16进制的数
// PS:radix的范围:2-36.
3.parseFloat(string):将字符串转换成浮点型
let demo = "123.233";
let num = parseFloat(demo);
console.log(typeof (num) + ":" + num); // number:123.233
let demo = "123.2.33";
let num = parseFloat(demo);
console.log(typeof (num) + ":" + num); // number:123.2
// 找到第一个小数点后,再遇到小数点立马停止
let demo = "12a3.2a.33";
let num = parseFloat(demo);
console.log(typeof (num) + ":" + num); // number:12
// 遇到非数字位立马停止。
4.String(mix):将所有值都转换成字符串
let demo = "123.2.33";
let num = String(demo);
console.log(typeof (num) + ":" + num); // string:123.2.33
let demo = undefined;
let num = String(demo);
console.log(typeof (num) + ":" + num); // string:undefined
let demo = true;
let num = String(demo);
console.log(typeof (num) + ":" + num); // string:true
5.Boolean()
let demo = "abc";
let num = Boolean(demo);
console.log(typeof (num) + ":" + num); // boolean:true
let demo = "";
let num = Boolean(demo);
console.log(typeof (num) + ":" + num); // boolean:false
除了" ", undefined, NaN, null, 0, false这六个的boolean = false以外,其他值的boolean都为true。
6.toString(radix), radix表示目标基底
注意写法,与前面的略有不同:demo.toString()。
let demo = 123;
let num = demo.toString();
console.log(typeof (num) + ":" + num); // string:123
let demo = 10;
let num = demo.toString(8);
console.log(typeof (num) + ":" + num);// string:12
// 代码含义:将10转换成8进制。与parseInt的进制正好相反。
PS:undefined和Null不能用在这里,会报错。
小练习:将10000b转换成十六进制
先将10000b—>十进制—>十六进制
let demo = "10000";
let num = parseInt(demo, 2);
let test = num.toString(16);
console.log(typeof (test) + ":" + test); // string:10
二、隐式类型转换
1.isNaN(),内部含有一个Numer()
console.log(isNaN("abc"));
console.log(isNaN(null));
console.log(isNaN(undefined));
true
false
true
Number(“abc”)–>NaN–>true(先将Number(“abc”),得到NaN,最后是NaN,得到true。)
Number(null)-->0
–>false
Number(undefined)–>NaN–>true
2.++/-- +/-(一元正负)
let a = "123";
a ++;
124
内部有隐形转换Number.Number(“123”)–>123–>124
let a = "abc";
a ++;
NaN
Number(“abc”)–>NaN–>NaN。(typeof依然是Number)
let a = +"123";
a ++;
NaN, Number类型
3.+(加号),调用的隐式转换是String()
当加号+两侧有一个字符串的时候,就会调用string(),将两边全部转换成字符串。
let a = "abc" + 1;
console.log(typeof (a) + ":" + a);
string:abc1
4.-*/% (减乘除mod),隐式调用Number()
let a = "1" - 1;
console.log(typeof (a) + ":" + a);
let b = "1" * 1;
console.log(typeof (b) + ":" + b);
let c = "2" % 1;
console.log(typeof (c) + ":" + c);
let d = "1" / 1;
console.log(typeof (d) + ":" + d);
let e = "a" * 1;
console.log(typeof (e) + ":" + e);
number:0
number:1
number:0
number:1
number:NaN
5.&& || !
6.<> <= >=
1 > 2 -->false
2 > 1 > 3 -->false
7.== !=
NaN == NaN -->false
undefined == undefined -->true
=,!(绝对等于===,绝对不等于!==,注意NaN)
1 === “1” --> false
2 === 2 -->true
NaN === NaN -->false
NaN !== NaN -->false
特殊的隐式类型转换点击查看