js笔记 一.基本类型,类型转换与typeof

6大基本类型

Number
Boolean
String
Object(包括null,array)
Function
undefined



typeof 返回值

number
boolean
string
object
undefined
function



显式类型转换常用函数

Number(num)

会尽一切可能将数据转换成Number类型
如果能成功转换就会转换成数字
如果转换不成功就会变成NaN(也是Number类型的)

Number(true)—>1

Number(null)---->0

Number(undefined)---->NaN

Number({})-------> NaN

Number([]) ----->0

Number("")---->0

Number(" 1")------> 1

Number(“12abc”)------> NaN

Number(1/0) -------> Infinity



isNaN()

这个函数首先会将参数转化为Number类型,再将转化后的结果与NaN进行比较
转化结果为NaN返回true,否则返回false

isNaN(true)—>false

isNaN(null)---->false

isNaN(undefined)---->true

isNaN({})-------> true

isNaN([]) ----->false

isNaN("")---->false

isNaN(" 1")------> false

isNaN(1/0)------> false

isNaN(“12abc”)------> true



parseInt(num)

会将number转换成整数,但是在字符串中识别数字比Number要强大

parseInt(“12.5”) ----> 12

parseInt(12.5) ----> 12

parseInt(“12.5abc”)-------> 12

(我们在实际开发中就可直接使用parseInt(“100px”),取出相应的csss属性中的数据)

parseInt(" 12.5")-------> 12

parseInt(“abc12.5”) ----> NaN

parseInt(true) ----> NaN

parseInt(null) ----> NaN

parseInt(undefined) ----> NaN

parseInt("") ----> NaN

parseInt(" ") ----> NaN

parseInt(1/0) ----> NaN



parseInt(num,redix)

会将第一个参数num看成redix进制的字符串,然后转成10进制

parseInt(10,2) —> 2
parseInt(10,16) —> 16
parseInt(2,3)----->NaN

注意有一个小坑
parseInt(1/0,18) —> NaN
parseInt(1/0,19) —> 18
在js中被除数为0时结果为 -----> Infinity
所以表面上第一个参数是1 / 0
实际上js会将其转化为Infinity
即parseInt(“Infinity”,19)
而在19进制中,Infinity第一个字母i是可以识别的,代表18




parseFloat

同parseInt,只不过是将数据转化为f浮点型



Boolean()

尽可能的将数据转化为布尔型

Boolean(null) -----> false

Boolean(undefined) -----> false

Boolean("") -----> false

Boolean(" ") -----> true

Boolean(“a”) -----> true

Boolean({}) -----> true

Boolean([]) -----> true

Boolean(0) -----> false

Boolean(1) -----> true

Boolean(-1) -----> true

Boolean(1/0) ---->true



toString(radix)

将十进制的数转化为radix进制的字符串

var b = 10
b.toString(2) ----> 1010

b.toString(8) ----> 12

b.toString(4) ----> 22






隐式类型转换

一元运算符: ++/- -/+/-

在js中++/–这种自增型运算符,以及一元正负号+/-
首先会将数据转换为Number类型再进行计算

	var demo = "123";
	typeof(demo);//string
	demo++;
	typeof(demo);//Number
	console.log(demo);//124
	

	demo = "123abc";
	typeof(demo);//string
	demo++;
	typeof(demo);//Number(NaN)
	console.log(demo);//NaN

	demo = +"123";
	typeof(demo);//Number
	console.log(demo);//123


	demo = +"123asd";
	typeof(demo);//Number
	console.log(demo);//NaN




二元运算符:+

在"+"表示二元计算时,只要两侧有一个是字符串类型的,那么所有的数据类型统统转化为字符串类型

	var a = 1,b = 2, c = "3";
	var d = a + b + c;//"33"
	//首先计算 a + b = 3
	//然后 3 + c === > 3 + "3" ==== > "33"
二元运算符:除了+以外的所有的四则运算符

例如 -, *,/这些运算符,会直接将运算的的数据都转化为Number类型

	var a = "123" - "10";//113
	var b = "123" * "100"//12300
	var c = "100" / "10"//10
	var d = "12a" - "10"//NaN
>,>=,<,<=

这些运算符,在两个数据都是字符串时我们需要挨个比较字符的ASCALL码值
其余时候会先将数据都转化为Number类型,再进行比较

== , !=

这些运算符也会将不同的数据类型都先转化为Number类型再进行比较

=== , !==

使用这些比较符号不会发生类型转换,比较安全

笔试题练手

题目
var str = false + 1;
console.log(str);
var demo = false == 1;
console.log(demo);
if(typeof(a) && -true + (+undefined) + ""){
	console.log("test1");
}
if(11 + "11" * 2 == 33){
	console.log("test2")
}
if(!!"       " + !!"" - !!false || console.log("test3")){
	console.log("test4");
}
解析
var str = false + 1;
console.log(str);//1
var demo = false == 1;
console.log(demo);//false
if(typeof(a) && -true + (+undefined) + ""){
	//typeof(a)返回值为字符串"undefined"
	//被js隐式类型转换 Boolean("undefined") ===> true
	//所以typeof(a)执行结果为 true
	//-true 被js隐式类型转换为 -Number(true) ===> -1
	//+undefined 被js隐式类型转换为 -Number(undefined)===> NaN
	//-1 + NaN ====> NaN
	//NaN + "" 被js隐式类型转换为 "NaN" + "" ====> "NaN"
	//即 -true + (+undefined) + ""  ====>  "NaN"
	//最后"NaN"再被隐式类型转换为Boolean("NaN")====>true
	//所以-true + (+undefined) + ""执行结果为 true
	console.log("test1");//执行该语句
}
if(11 + "11" * 2 == 33){
	//首先对 "11" * 2进行处理
	//"11"隐式类型转化为数字11    "11" * 2 ====> 22
	//即等式左边为 11 + 22 ====> 33
	console.log("test2")//执行该语句
}
if(!!"       " + !!"" - !!false || console.log("test3")){
	// 对"   "进行隐式类型转化
	//Boolean("    ")===>true
	//对""进行隐式类型转化
	//Boolean("")===>false
	//即!!"       " + !!"" - !!false  ====> true + false + false
	//对布尔值进行隐式类型转换
	//结果为 1 + 0 + 0 ====> 1  再进行类型转换Boolean(1)==>true
    //运算结束,直接进入if语句内	
	console.log("test4");//执行该语句
}
答案

1
0
test1
test2
test4

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值