变量提升
动态类型语言,变量可以随时更改类型
学es3
js有七种数据类型
number boolean string null undefined object(array和function二种) symbol(符号)
number
有很多类1+.1=1.1,0b11(二进制),011(8进制)
string
“”,’‘,’ ‘,双引号单引号都可以,转义
a='/'',a='/n',a='/t',字符串长度都是1
命令行里面打回车就会换行,所以要\来表示换行,js抄袭这个,多行字符串
a='aa\
qqq'
但是容易带出来错误,如果有人要坑你,在\后面还打了空格就完蛋啦
所以推荐用下面的:
a='aa'+
'qqq'
es6引入了下面方法,用反引号来默认后面是多行字符串
a=`ddd
wwww`
boolean
只有true和false二种
null类型,值就一个
undefined,也是一个值
是js之父的一个bug,都表示什么都没有,但是有一点细微的区别:
如果一个变量没有值就是undefined(更被js推荐)
如果想有一个对象,但是现在还不想赋值,就推荐给个值null,
var obj=null
非对象推荐为undefined
var n(默认是undefined)
object
是复杂类型,由上面六种简单类型组成
哈希表的key是字符串不是变量,取用的时候记得加上双引号,如aa['name'],而且符合标识符的情况下取用可以用aa.name
哈希表的key可以不加引号,但是这时候必须符合标识符规则
delete aa['name']
aa.name//undefined(没有这个value了)
'name' in aa//false(没有这个key)
成功清除这个键值对
失败的清除方法
aa.name=undefined
'name' in aa//true
遍历对象
var aa={'1':11;'2':ww}
for(var key in aa){
注意:遍历的key的顺序不一定,可能是1先可能是2,对象的键值对就是无序的,所以遍历结果肯定也是无序的
aa.key不是对应value的,aa.key等价于aa['key'],这里key是变量不是字符串
}
怎么知道变量是哪一种数据类型
typeof(变量)会返回对应类型,有一个bug就是null对应返回的是object,还是函数返回的是function
类型转换
变成字符串
xxx+‘’;就能把xxx转换成字符串,任何类型的xxx都可以
window.String(xxx)也可以
另一种toString(),不是很好用,限制多
变成bool
五个falsy值,Boolean(xxx)为false,xxx可以是0,NAN,‘’,null,undefined,
!!xxx也可以
变成number
Number(‘1’)
parseInt('1',10),考试考,会有nan,能转到哪里是哪里
parseFloat('1.23')
xxx-0,常用的,如‘1’-0===1
+xxx,取正也可以
内存图
复杂类型,栈存地址
var a
a={self:a}//输出是undefined
var a={}
a={self:a}//上一步明确了a的地址,所以可以
image.png
image.png
注意第三行,开始会确定a,任何在从右到左执行
垃圾回收
如果一个对象没有被引用就是垃圾,将要被回收
image.png
image.png
所以这里不被回收
加上
image.png
就是真正的垃圾了
或者关掉页面document就没有了,就是垃圾了,但是ie有问题,无法在页面关闭时把他们清除
浅拷贝和深拷贝
基本类型都是深拷贝,不互相影响
复杂类型的对象,浅拷贝其实就是指向一个东西
用2345降小,在通过jpgpress网站可以进一步压缩图片
表达式不需要分号结尾。一旦在表达式后面添加分号,则 JavaScript 引擎就将表达式视为语句,这样会产生一些没有任何意义的语句。
JavaScript 引擎的工作方式是,先解析代码,获取所有被声明的变量,然后再一行一行地运行。这造成的结果,就是所有的变量的声明语句,都会被提升到代码的头部,这就叫做变量提升(hoisting),但是还是会显示undefined,表示变量a已声明,但还未赋值。
下面这些则是不合法的标识符。
1a // 第一个字符不能是数字
*** // 标识符不能包含星号
a+b // 标识符不能包含加号
-d // 标识符不能包含减号或连词线
中文是合法的标识符,可以用作变量名。
var 临时变量 = 1;
源码中被 JavaScript 引擎忽略的部分就叫做注释,它的作用是对代码进行解释。Javascript 提供两种注释的写法:一种是单行注释,用//
起头;另一种是多行注释,放在/*
和*/
之间。此外,由于历史上 JavaScript 可以兼容 HTML 代码的注释,所以``也被视为合法的单行注释。但是-->只有在行首,才会被当成单行注释,否则会当作正常的运算。
NaN是个数字,但是表示含义是非数
网友评论