JS知识点记录(持续学习中。。。)
1、javascript包括3部分(核心:ECMAscript、 文档对象模型:DOM、 浏览器对象模型:BOM),浏览器、node是js的宿主环境(运行js)。
2、浏览器会对引入的js按引入先后顺序进行解析,<script/>引入标签放置在html的页面内容后面(body中,防止浏览器解析js时间过长,页面内容显示空白)
3、5种基本数据类型:null、undefined、boolean、nunber、string,占用固定大小空间,保存在栈内存。1种复杂类型: object,引用类型保存在堆内存, Infinity----正无穷、-Infinity---- 负无穷、NAN(not a number)----非数值 (除以0会产生这个数,不影响其他代码执行,NAN不等于其他任何值,包括自己)
4、基本类型: var str1 = 'a'; var str2 = str1; str2 是str1复制出来的副本,对他们操作不会互相影响。 引用类型: var obj1 = new Object( ); var obj2 = obj1; obj2.name = ' a ' || obj1.name ; alert( obj1.name ) || alert( obj2.name) // a ,复制了指针, 引用赋值指向同一对象
5、作用域链:我的理解就是和冒泡差不多,window 全局,① var a = 0; function() { ② var b = 0; function(){ ③ var c = 0; } } ③中能访问c、b、a、;②中能访问b、a、①中只能访问 a;访问时从下往上逐级查找,最终是全局。with 可以延长作用域链,就是让它最先查找with(){ 内容 } 中的。
6、变量提升:js没有块级作用域,for(var i = 0; i<10; i++ ) {setTimeout(()=>{ console.log(i) } ,1000)} //打印 10次10 console.log(i) //0 , i 就是全局变量 ,也就是说全局只有一个i。若想打印0到9, 可以吧var i= 0 改为 let i = 0, (es6特性,这样在全局就访问不到i了,只有在for循环里能访问i,每次循环都会创建新的i)。
7、js 中的数组可以同时保存number,string,object,它的长度length可以动态添加删除的,比如var arr = [0,1,2]; arr.length = 2; alert(arr[2])// undefind
8、5个数组迭代方法,对数组的每一项运行给定函数: every():如果该函数对每一项都返回true,则返回true;some():如果该函数对任一项返回true,则返回true;filter():返回该函数会返回true的项组成的数组;forEach():没有返回值;map():返回每次调用该函数返回的结果组成的数组。以上迭代方法都不会修改数组中包含的值。
9、2个缩小数组的方法,reduce()----`从左往右`和reduceRight()----`从右往左`,var arr = [1,2,3,4,5]; var sum = arr.reduce(function(prev,cur,index,arr) { return prev + cur; }); alert(sum)// 15;prev:前一项返回结果;cur:后一项。
10、函数是对象,函数名是指针。
11、没有重载,函数名一样后面函数会覆盖前面函数。
12、call和apply()方法,设置函数体内this对象的值,扩充函数赖以运行的作用域。window.color = 'red'; var o = { color: 'blue'}; function sayColor(){ console.log(this.color) }; sayColor(); // red sayColor.call(this);// red sayColor.call(window);// red sayColor.call(o);//blue
13、字符串方法: concat()和‘+’相同,拼接字符串;slice()、substr()、substring():都会返回操作字符串的子串,传第一个参数表示字符开始位置(不包括起始位置本身字符),第二个参数不传默认到字符串结束,substr传第二个参数表示截取字符串个数,slice()和substring()传第二个参数表示截取字符的结束位置(substring()方法会将参数小的作为起始位置(不包括起始位置的字符,大的作为结束位置(包括结束位置字符)))。传入参数为负值时的区别:slice()方法会将传入的负值与字符串的长度相加, substr()方法将负的第一个参数加上字符串的长度,而将负的第二个参数转换为 0。最后, substring()方法会把所有负值参数都转换为 0。
14、单体内置对象:Object、Array、String、Global和Math。Global对象的encodeURI()方法编码后的结果是除了空格之外的其他字符都原封不动,只有空格被替换成了%20。而 encodeURIComponent()方法则会使用对应的编码替换所有非字母数字字符。
15、创建每一个函数都有prototype(原型)属性,这个属性是一个指针,指向一个对象,所有对象实例共享的原型对象属性和方法。
16、继承、闭包、、、、、、
17、var 定义的全局变量和window定义的全局变量区别是前者不能用delete操作符删除、后者可以用delete删除。