1 、除+操作符外,其他操作符在有数值时都会转化为数值后进行操作,+在有数值和字符时会转换为字符(对象(不带 val ueof 方法)一般会转为字符再以上规则操作)
2 、字符比较是比较字符编码值,大写字母会小于小写字母,而且比较一般是比较第一位字符,可全部转为大写或全为小写进行比较
3 、 tostring ()可在()内加上进制数先对数值(数值以外类型无效)进行进制转换后再转为字符
4 、&&、||: &&当前面值为 false 时不执行后面值返回 false ,前面为 true 时执行后面值,取后面值,日当前面值为 true 时不执行后面值,取前面值,当前面值为 false ,执行后面值,取后面值
5 、 switch 里的 case 可以是任何数据类型,甚至是表达式,比较值时是使用全等操作符,不会发生类型转换
6 、 js数据类型包含基本类型和引用类型:基本类型复制是重新创建空间存放复制的值,所以不受影响,引用类型的复制是地址复制,所以改变其中一个会相互影响。(函数传参和数据复制类似,只是复制到函数作用域中变成函数的局部变量,所以传入的基本类型函数内部修改,不会影响函数外面的参数,但引用类型会)
7 、变量的是一级一级忘上查找的,找到最近一级就不会再向上找了,所以修改是只改最邻近一级
如: var a= 2;function test(a){ a=7} test(a); console.log(a) //2
var a= 2; function test(b){ a=7} test(a); console.log(a) //7
8、typeof、 instanceof : typeof判断基本类型比较方便,但是对引用类型用处不大,intanceof则可 以判断引用类型是否为某具体类型
9、对象调用toString()结果是[object Object],数组调用toString()返回数组[]内值
如: var a={a:3,b:5}; console.log(a.toString()) //[object Object]
var c=[2,4,3,5]; console.log(c.toString())//2,4,3,5
10、数组unshift、 pop可组成前增后减的队列方法、shift、push可组 成前减后增的队列方法,pop、shift返回删除项,unshift、 push返回新增后新数组长度
11、sort()方法是将数组的值转化为字符串,再进行比较,这会很容易照成数值排序错误。因此sort可以接受一个比较函数作为参数,按照函数的比较方式进行排序
12、splice返回被删除项的数组,slice分割数组,arr.slice(1 ,3)返回arr从index为1和2的数组
如: let aArr=[1,2,3];console.log(aArr.splice(1,2)) //[2, 3]
let cArr=[1,2,3];console.log(cArr.slice(1,2)) //[2]
13、concat可以合并数组且防止数组污染,Object.assign可合并对象且防止对象污染,但是concat和0bject.assign都是浅拷贝,当遇到属性包含引用类型时,还是会被污染。
如: var testArr=[2,3,[5,6],5,[6,7]];
var newArr=[].concat(testArr);testArr[2][1]=9;
console.log(testArr[2][1],newArr[2][1]) //9,9
var testObj={a:1,b:{c:5}};
var newObj=Object.assign({},testObj);testObj.b.c=0;
console.log(test0bj.b.c,new0bj.b.c) //0,0
14、用let重复申明一个变量会报错,var不会
15、vue 里面用data(){return{}}主要是为了防止定义的变量全局污染
16、数组indexOf是使用全等比较,对象变量保存的是引用类型的堆地址,所以会出现如下情况:
var person={name: 'ann'};
var people={name:'ann'};
var peo=[person];console.log(people.indexOf(person),peo.indexOf(person)) //-1,0
17、 Date.now()返回当前时间的毫秒数,+new Date()返回传入时间的毫秒数,默认为当前时间,Date.parse、Date.UTC也是将时间转为毫秒数,只是需要特定格式时间参数,时间可以直接比较,因为它里面的valueOf方法会自动转为毫秒数
18、正则表达式:三个标识符(g:全局,匹配所有,否则匹配到一个即终止,i不区分大小写,m多行模
式)、元字符(必须加\转义,包含([{\^$|)?*+.]})
19、function: callee: 包含arguments的函数,caller保存调用当前函数的函数的引用
20、call、 applay:在 特定作用域中调用函数,两种的区别在与传参方式不同,apply 是数组模式,call是一
般参数模式
21、hasOwerProperty判 定属性是否在原型中,in判定属性是否在对象中(在原 型中或在实例中)
22、继承: 1、原型链:通过给对象的prototype赋值另一一个对象的实例,实现对另一个对象的实例的复
用,缺点是赋值的实例是个引用类型,对对象进行创建实例的时候,不同实例间属性更改会互通。
2、借用构造函数:通过call/ apply方式借用另一个对象的构造函数,缺点失去了方法复用的意义。
3、组合继承:对方法进行复用,对构造函数通过call/apply借用
23、BOM的核心是window:全 局下var a与window.a一致, window.open(url,target)会跳转到指定了target的那个窗口,如果没有就会新建一个target窗 口;不过声明方式使用可能无效,如var isOpen=window.open(url,target)可能回无效
24、location.search 获取url后面的带问号参数字段,修改url跳转回保留跳转记录,因而点击浏览器的
回退键会回退到修改前的页面,要想不回退修改前的页面可使用location.replace,location.reload()重新加
载,可能是从缓存中重新加载,location.reload(true)则会从服务器中重新加载