javaScript康复训练-2022年1月6日

前言

在javaScript有六大变量类型,今天我们的话题就围绕这六大类型进行讨论

Number
String
Object
Boolean
function
undefined

undefined

undefined,顾名思义,就是未定义的意思,当我们初始化一个变量时,没有给一个变量赋初始值,那么这个变量默认为undefined,而不是null,他跟null不一样,他是单独一个类型,而null属于object类型,这个值的出现,实际上也是为了区分空指针和未初始化数据。一般用于比较。

 var x;
 console.log(x)
 // 结果为true
 console.log(x==undefined)

当然了,因为是为未初始化,所以变量类型也不能确定,另外存放undefined的变量和未定义的变量还是有区别的,未定义的变量直接使用会报错

 var x;
 // 结果还是undefined
 console.log(typeof x)
 // 报错啦,没有定义y
 console.log(y)

事实上undefined衍生于null值,所以他们比较结果是true

// 结果为true
console.log(undefined==null)

Boolean

Boolean只有两个值true和false,在javaScript中,Boolean的值还是区分大小写的,也就是说写true和True还是有很大的区别的,值得注意。另外我们可以强制转换Boolean在javaScript中,如果我们写if(100)就等价于写if(Boolean(100))。

// true 非零数字即可
console.log(Boolean(1));
console.log(Boolean(-1);
// false
console.log(Boolean(0));
// false
console.log(Boolean(""))
console.log(Boolean(null))
console.log(Boolean(undefined))
// true
console.log(Boolean("非空字符串"))

Number

数值类型有整形和浮点型,number的最大和最小我们都可以通过指令获取,如果越界了就是infinite有正负号

Number.MAX_VALUE
Number.MIN_VALUE

在进制表示中,ECMA规范跟java几乎一致,但是在8进制表示中有所不同(java没试过,各位试试?)

// 十六进制转十进制输出10
console.log(0xA)
// 输出6
console.log(6)
// 无效的八进制数,实际上是80,0被舍弃
console.log(080)
// 有效的八进制数,结果是63
console.log(077)

在javaScript可以保存0和-0,但是他们比较还是一样的

var x=0;
var y=-0;
console.log(x==y);

浮点数就比较特殊,因为要保存小叔子后面的数字,所以他占用的空间比较大,为了节省空间,javaScript通常会自动将类似83.00000这种浮点数转为整数(也就是小数点后面全是0的数)

console.log(83.00000);

当然因为精度的关系,所以浮点数的比较不一定精准,当然,我没找到具体的例子,就直接给出解决方案把,解决思路就是:比较他们之间的差距,如果可以忽略不计,那么我们则认为他们相等

var x=0.1
var y=0.3
if(Math.abs(x+y-0.4)<=0.000000001){
	console.log("x+y等于0.4")
}

还有一种比较特殊的类型NAN—Not a number(不是一个数字),官方给了一个函数来判断一个变量是否为数字isNaN()

//true
isNaN(undefined)
//true
isNaN("a")
//因为可以转化为数字,所以不是NaN
isNaN("100")
//Boolean true转1 false转0,所以Boolean类型返回结果都为false
isNaN(true)

那么如何将其他类型转化为数字呢?我们通常使用parseInt和number进行强转,是不是很像java呢?我这里还是推荐使用parseInt,因为number自动化操作有点多,规则也不好记,而parseInt我们可以手动操控,十分方便

parseInt("10000111",2)
// 十六进制转化,会省略空格哦
parseInt(" AB",16)
// 默认是十进制哦,如果有0x符号就是十六进制
parseInt("10000111")
// 会忽略前置0
parseInt("010000111")
// 从第一个1遍历到人结束,直接输出100
parseInt("0100人00111")
// 小数点也是一样
parseInt("0100.00111")
// 小数举一反三,用parseDouble啦
parseDouble("0100.00111")
// 但是只能解析一个小数点
parseDouble("0100.001.11")

函数

javaScript的函数使用方法十分简单,只需要记住关键字function,用法有两种,如下

			QueryDay=function(n){
				"use strict"
				arguments[0]=1;
				switch(true){
				case n==1:alert("1");break;
				case n==0:alert("0");break;
				default:alert("07");break;			
				}
			}

			function QueryDay(n){
				"use strict"
				arguments[0]=1;
				switch(true){
				case n==1:alert("1");break;
				case n==0:alert("0");break;
				default:alert("07");break;			
				}
			}

javaScript传参的思想一定要搞明白,不要死记硬背。其实也很简单,函数参数的传递过程实质上就是先把你要传的参数放入一个数组,然后在将这个数组传进去,这个数组的名字叫arguments,如果你只传了一个参数,但是你要用>1个参数,那么除了第一个参数被初始化,其他参数都是默认为undefined,当然,我们可以重写参数里面的东西,但是前提得保证不是严格检查模式,严格检查模式重写会失效。

			function QueryDay(n){
				arguments[0]=1;
				switch(true){
				case n==1:alert("1");break;
				case n==0:alert("0");break;
				default:alert("07");break;			
				}
			}

javaScript并没有函数的重载,而是后面的函数会覆盖前面的函数,这样设计也有一定合理性,想想参数传递的原理,javaScript对函数的约束并不严格,不需要你传多少参数,传什么参数,甚至也不需要你返回什么。当然建议要么让一个函数永远有返回值,要么永远没有返回值。这样也能减少代码调试的难度

			function QueryDay(n){
				arguments[0]=1;
				switch(true){
				case n==1:alert("1");break;
				case n==0:alert("0");break;
				default:alert("07");break;			
				}
			}
			
			function QueryDay(n){
				alert("真好");	
			}
		}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值