发表于: 2019-12-01 00:55:29
1 866
今日完成的事
今天复习了js基础
Number数据类型 就是0 12 -12 12.5等0 整数 负数 小数和NaN
NaN:not a number意思是不是一个数,但是属于number类型。
NaN可能是任何东西,NaN和任何其他值都不相等,包括他自己
IsNaN:is not a number意思是非有效数字。
IsNaN()函数是用来检测当前这个值是否为非有效数字,如果不是有效数字检查结果是true,是有效数字为false。
注意一点当用isNaN检测值的时候,检测的值不是number类型的,浏览器会默认用Number()函数把值先转换为number类型,然后再去检测。
所以isNaN(”12”)检测结果为false。
Number()把其他数据类型转化为number类型的值。
所以Number(”12”)=12,isNaN(“12”)的值是false。
使用Number转化时只要出现任何一个非有效数字字符,结果就是NaN。
Number(true)=1
Number(false)= 0
Number(null)= 0
Number(undefined)=NaN
引用数据类型转换成Number首先用tostring()函数转化为字符串,再把字符串转化为number即可,空数组转化为空字符串。
只有一个数字或者空的的数组可以转化成number,但是其他引用数据类型转化为number就是NaN,空字符串转化成数字0。
空对象转化成字符串是 object object 。
常用的4个控制台
Console.log console.dir(输出一个对象的详细属性信息) console.table(把多维json数组在控制台按照表格的形式呈现出来) document.write
document.write像页面中打印输出内容
继续学习JS基础知识,JS常用的输出方式,alert(),confirm(),prompt() 三种提示框弹出的信息最后都会利用tostring()函数转化为字符串类型。三种方式会阻断代码继续执行,只有当窗口关掉,js才会继续进行
confirm在alert的基础上增加了让用户选择性的操作,它提供了俩个摁纽,确定和
取消
变量提升
在浏览器执行第一行代码之前会进行变量提升和函数定义,变量提升只会发生在当前作用域
浏览器在执行创建函数这一步时候会跳过,因为在开头函数就已经被定义了。
带var和不带var的区别,在全局作用域下声明一个变量相当于给window全局对象设置了一个属性,变量的值就是属性值(私有作用域下的私有变量和window没有关系),全局变量一改,window属性值也修改,window.a的值修改,变量a的值也改,全局变量和Window中的属性存在映射机制(一个改另一个也跟着改),私有作用域,要是一个变量不带var会向上级作用域查找,不是继续向上查找,一直找到window,这种查找叫做作用域链,不带var的不是变量,是给window增添一个属性。If条件下 的条件提升,在当前作用域下,不管是否成立都要进行变量提升,带var的只是声明,带function的在老版本浏览器渲染机制下,声明加定义都处理,但是为了迎合ES6中的块级作用域,新版本浏览器对于函数(在条件判断中的函数),不管条件是否成立,都只是先声明,没有定义。If判断为true,进入if体后才会进行提升和定义
关于重名的处理,如果名字重复了,不会重新声明,只会重新赋值,不管是执行的时候还是提升的时候
Es6基于let或者constant创建的变量或者函数不存在变量提升并且切断了全局变量与window属性的映射机制
null和undefined
null:空,没有
undefined:未定义
空字符串与null的区别,空字符串开辟了内存,消耗了一点性能,null一点没有。
Null与undefined区别,null一般指现在没有,以后可能有也可能没有,但是预期想有。一般都是手动赋值为null,后期在赋值。Undefined是完全没在预料之内的。
引用数据类型
对象objet
每一个对象都是由0到多组属性名(key)与属性值(value)组成的,每一组属性名与属性值用逗号分隔。
属性,描述对象的特点和特征。
如何获取属性名对应的属性值
Var obj ={name:”珠峰”,age:8};
Obj.name 对象名.属性名 点忽略了属性名的单双引号
Obj[“name”] 对象名【“属性名”】这个格式不能忽略单双引号
对象的属性名都是字符串或者数字,属性值可以是任何格式。
如果属性名是个数字,第一种方式不好使了必须得用中括号的形式。但是数字加不加双引号无所谓了。一个对象的属性名是不能重复的,具有唯一性。
删除属性名。
假删除设置属性值为null,
Obj.属性名=null,让其属性值为null,但是属性还在对象中。
真删除
delete obj.属性名;
基本数据类型与引用数据类型的区别
JS是运行在浏览器中的,浏览器会为JS代码提供执行的环境,这个环境叫全局作用域,前端用window表示
函数数据类型
函数数据类型也是按照引用地址来操作的, 当我们创建一个函数时有一些参数我们并不清楚,只有当函数运行的时候,别人传递给我们才知道,此时我们需要设定入口,让用户执行的时候通过入口把值输入。
加了小括号代表函数执行的值,不加小括号代表函数本身
函数执行的过程,没有return返回值是undefined
1. 形成一个私有的作用域
2. 形参赋值(私有变量)
3. 变量提升(私有变量)
4. 代码执行
5. 栈内存释放或者不释放
判断语句
语法
If(条件1){
条件一成立执行操作
}else if(条件二){
上面条件不成立,条件2成立,执行操作
}
else{
以上条件都不成立执行操作
}
如果好几个条件都成立了,只把第一个成立的条件执行,后面成立的条件忽略不管。
条件的写法:
If(a){
执行操作
}
先把a转化为布尔类型,判断真假决定条件是否成立。
If语句不能用break和continue
三元运算符
条件?条件成立执行:条件不成立执行;
三元运算符不能省略
条件?条件成立执行:;这样会报错
可以用null站位
条件?条件成立执行:null;
三元运算符如果条件成立或者不成立的某种情况并不需要做什么处理,如果语法为空不符合可以使用null,undefined,void占位即可。
如果某一种情况执行多个操作,使用小括号包起来,中间用逗号分隔。
条件?(条件成立执行1,条件成立执行2):null;
比如
num >5 && num<=10?(num++,console.log(num)):null;
在三元运算符的操作中不能出现break,continue,return
Switch case循环
Switch case应用于if.else中一个变量在不同情况下的不同操作
语法 switch(存放的是一个值,一般写成变量或者计算){
Case 值:
…….
Break
Case 值:
…….
Break
default
….
Break
}
Case后面放入的都是值,目的是验证switch后面的值和哪一种case后面的值相等,相等的进行相应的处理
Switch小技巧把符合某几项值都去做同一件事,使用不加break实现
比如
Switch(num%3){
Case 0:
Case 1:
Num—
break
}
这样余数是0或者1都能执行
Switch的case中使用的比较是3个等于号,也就是绝对相等
循环语句
循环:重复做一件事
循环语句for
语法for(起始值;执行条件;更新表达式){
循环体:重复做的事情
}
初始值与执行条件和更新表达式之间用分号隔开
没有更新表达式就会出现死循环,出现死循环下面的代码都执行不了。
评论