一、Js方面的知识点
内置类型
js中有7种内置类型:分为两大类型:
1、基本类型
基本类型:number、string、Boolean、undefined、null、symbol
js中的数字类型都是浮点类型没有整型。
例子:
Var a = 1.1
Var b = 2.2
Console.log(a+b) 结果为3.300000000003 这就是浮点型
解决浮点型的方法:
<script>
let a = 1.1
let b = 2.2
var c = parseFloat(a)+parseFloat(b) 结果为3.300000000003
解决方法:
var c = (parseFloat(a) + parseFloat(b)).toFixed(2)
console.log(c);
</script>
2、对象
对象:object是引用类型,在使用过程中会遇到浅拷贝和深拷贝的问题?
什么是浅拷贝什么是深拷贝?区别(在于是否真正获取一个对象复制实体,而不是引用)
浅拷贝:只是增加了一个指针,指向已存在的内存地址
方法:var newobject = $extend{(),oldobject}
深拷贝:增加了一个指针并且申请了一个新的内存,这个指针就指向这个新的内存。
方法:var newobject = $extend{true,(),oldobject}
扩展:
如果想获得一个变量的正确类型可以使用:object.Prototype.toString.call()这样就可以获得[object type]的字符串
扩展:
例子:Let a ;打印a的结果为undefined,但undefined不是保留字,在低版本会被赋值。如Let undefined = 1,使用上面就会打印出错。
解决方法
a===void 0 结果为undefined
3、四则运算
只有当加法运算时,其中一方为字符串类型,就会把另外的一方转换为字符串,其他的运算只要其中一方是数字,那么另外一个就是数字。
例子:
Var a = 1
Var b = ‘5’
Var c = ‘3’
Alert(a+b-c) 结果为:12即15-3 = 12
[1,2]+[3,4]//结果为‘1,23,4’
[] = [] 结果为false
原因:两边都为引用数据类型,==是直接比较两边的数据,结果为false。
因为[]问引用类型,两个[]分别指向不同的堆内存,所以数据不同返回值为false。
[]==![] 结果为true
原因:
①:[]是对象,比较过程依靠=》Toprimitive([])==false比较,
②:toprimitive默认调用的是toString这个方法,于是toprimitive([])就等于一个空字符串
③:空字符串==false,然后Tonumber(‘’)==0,即0==0,结果为true
4、原型及原型链
每个函数都有一个prototype属性,除了function.Prototype.bind(),改属性指向原型。
每个对象都有一个_proto_属性,指向了创建该对象的构造函数的原型
一直到object.prototype原型对象终止,原型链结束
5、new
新生成了一个对象
链接到原型
绑定 this
返回新对象