javascript基础知识整理和部分高级,欢迎补充指正错误。

“= =“和”= = =”

当使用“= =”来比较两个值时,如果类型不同,则自动转换为相同类型在进行比较。

“===”:全等,判断两个值是否全等,和相等类似,不过不会进行类型的转换,类型不同直接返回false

数据类型:

基本数据类型:

1.数字num,2.string,3.Boolean,4.null,5.undefined

undefined:代表定义但未赋值;null:表示赋值了,只是赋值未null

什么时候赋值为null:

1.初始变量赋值为null,表示要赋值变量为对象;

2.结束时候,让不在使用对象被垃圾回收,设置对象值为null

对象数据类型:

1object对象,2.函数对象,3.数组对象

变量提升与函数提升:

通过var定义(声明)的变量,在定义语句之前就能访问到,值为undefined

通过function声明的函数,在之前就可以直接调用,var fun = function(){}这种不行

一.代码分类:

1.全局代码,2.函数(局部)代码

二.全局执行上下文:

1.在执行全局代码前,将window确定为全局执行上下文,

2.对全局数据进行预处理:var定义的变量==>undefined,添加为window的属性, function声明的全局函数==>赋值(fun),添加为window方法,this赋值给window

3.执行全局代码

三.函数执行上下文:

在函数调用,准备执行函数体前,创立对应的函数执行上下文对象(虚拟的,存在栈种)

对局部数据进行预处理:var定义的变量==>undefined,添加为执行上下文的属性, function声明的全局函数==>赋值(fun),添加为执行上下文方法,this赋值给调用函数对象

3.执行函数体代码

返回值:

return后的值将会作为函数的执行结果返回,可以定义一个变量来接受这个结果。

在函数中,return后的语句都不会执行。如果return后不跟任何值,相当于返回undefined

创建对象

var obj = new Object();

创建对象字面量:var obj ={},可以在创建时后直接指定对象中的属性

创建函数对象

var fun = new function()

使用函数声明创建一个函数

语法: function 函数名(参数1,参数20…){ 语句 }

function fun(){ console.log(1111111) }

js语句加分号问题:

js一条语句的后面可以不加分号;但是有两种情况不加会出现问题:

1.小括号开头的前一条语句:如匿名函数的自调用

2.中括号开头的前一条语句:

解决方法:在首行加个分号

this,arguments:

解析器在每次调用函数时候都会传两个隐含参数this和arguments,this指向一个对象,这个对象指函数执行的上下文对象。

根据调用的方式不同,this指向不同的对象:

1.以函数方式调用,永远指向我window

2.以方法方式调用,this指向调用方法的那个对象

3.当以构造函数调用时,this就是创建的那个对象

4.在使用call(),apply()方法时,this指向调用这个方法指向的对象

构造函数和普通函数基本相同不过习惯首字母大写,调用的方式也不同。普通函数是直接调用,而构造函数是要用new关键字调用

 function person(name,age,gender){           
 	this.name = name,            
 	this.age = age,             
 	this.gender = gender    
 	}    
 var obj2 = new person('corder',24,'man')    
 console.log(obj2)
构造函数执行流程:

1.立即创建一个新的对象

2.将新创建的对象设置成函数的this,在构造函数中可以使用this来引用新建的对象

3.逐行执行函数中的代码

4.将新建的对象作为函数的返回值

arguments:是用来封装实参的对象,是个类数组,它可以通过索引来获取数据,也可以获取长度。在调用函数时,所有的实参都在arguments中保存,所以即使不定义形参我们也能使用实参, arguments[0]表示第一个实参

它里面还有一个属性callee,这个属性对应一个函数,就是当前正在执行的这个函数的对象

回调函数:

什么是回调函数:1.自己定义的函数,2.自己没有去调用这个函数,3.这个函数执行了

常见的回调函数:dom事件回调函数,定时器回调函数,ajax回调函数,声明周期回调函数

原型对象:

我们创建的每一个函数,解析器都会向函数中添加一个属性prototype,默认指向的object是个空对象,这个属性对应着一个对象,这就是所谓的原型对象。

显式原型,隐式原型:

每个函数创建都有的prototype属性即为显式原型,默认指向空的object对象

每个实例对象都有一个_proto_属性即为隐式原型,同样指向这个空的object对象

程序员能直接操作显式原型,但是不能操作隐式原型(ES6前)

实例对象的隐式原型等于构造函数的显示原型

1.函数的显示原型默认指向的对象是空的object实例对象(但是Object不满足)

2.所有函数都是Function的实例

3.Object的原型是所有原型链的尽头

var Fun  = function(){       
	alert(1)   
	}
var fun1 = new Fun()
console.log(Fun.prototype)
console.log(fun1._proto_)

原型就像一个公共的区域,所有同一个类的实例都可以访问到这个原型对象,所以我们可以把对象中共有的内容设置在公共区域–原型对象中

原型链:

当我们访问对象的属性或者方法时候,他会优先在自己中寻找,如果没找到就会到原型中寻找。当然原型对象也是一个对象,他也有自己的原型。所以如果原型中没有找到,就到原型的原型中去寻找,直到找到Object对象的原型,object对象的原型没有原型,如果object中没有找到就返回undefined

instanceof:用来测试一个对象是否为一个类的实例
表达式:A instanceof B

如果函数B的显示原型对象在实例A的原型链上,返回true,否则false

function person(name,age,gender)
    {
        this.name = name,            
         this.age = age,             
         this.gender = gender    
     }   
 person.prototype.showname = function(){
        console.log(1111)   
 }    
var obj2 = new person('corder',24,'man')    
    console.log(obj2)    
    console.log(obj2.name)    
    obj2.showname()

js垃圾回收(GC):

垃圾过多会导致程序运行过慢,所以就要一个垃圾回收的机制来清理垃圾

什么是垃圾:当一个对象没有任何一个变量或属性对他进行引用,我们永远将无法操作该对象,此时这个对象就是垃圾。

在js中有自动的垃圾回收机制,会自动将垃圾对象销毁。所以我们只需要将不用的对象设置为null

数组:数组也是一个对象

var arr = new array();语法:数组[索引] = 值 arr[0] = 10

length用来检测数组的长度,而且可以设置length的长度。多出的长度会显示逗号。当小于原 长度时候,会删除多出的元素

使用字面量来创建数组:var arr = [],可以在创建时候就指定数组中的元素;var arr = [1,2,6]

数组方法:

push():向末尾添加一个或多个元素,并返回数组的新长度

pop():删除最后一个元素,并将删除的元素作为返回值返回

unshift():向数组开头添加一个或者多个元素,并返回新的数组长度

shift():删除第一个元素,并将删除的元素作为返回值返回

slice(a,b):可以用来提取指定元素,不会改变数组,而是将截取到的元素封装在新的数组中返回

第一个参数:截取开始的位置,包含开始位置的元素。

参数2:截取结束位置的索引,不包含结束位置的这个元素。第二个参数可以不写,这样会截取开始向后的所有元素

splice(a,b,c…):会影响原数组,会将指定的数组删除并返回删除的元素。

参数1:开始位置的索引

参数2:表示删除的数量

参数3及以后:可以传递新的元素,会插入开始位置的前面

数组的遍历:

一般用for循环遍历数组,但是js也提供了方法,用来遍历数组

forEach()方法:需要一个函数作为参数,但这个方法是由我们创建但不由我们调用的叫:回调函数。数组中有几个元素就会遍历几次,每次执行浏览器会把遍历到的元素以实参的形式传递进来,我们可以定义实参,来读取内容

浏览器会在函数中传递三个参数:第一个:当前正在遍历的元素;第二个:当前元素的索引;第三个:正在遍历的数组

concat():可以连接两个或多个数组,并将新数组返回,不会影响原数组

join():可以将数组转成一个字符串,并返回新数组,不影响原数组,在join(’–’),–会成为字符串间的连接符

sort():对原数组元素进行排序,改变原数组。按照Unicode排序。我们可以在sort()中添加一个回调函数:arr.sort(function(a,b){return -1}),回调函数中需要两个形参,浏览器会指定数组中的元素做实参进行回调,使用哪个元素不确定。浏览器会根据返回值决定顺序,如果返回值大于0,交换位置,返回值小于0,位置不变,0默认相等也不变

<script>     
	var arr = new Array()     
	arr = [1,2,3,5]     
	console.log(arr.length)     
	var arr2 = [1,5,6,85,2,85,98]       
	console.log(arr2)    
	arr2.forEach(function(value,index,object){       
		console.log(value);        
		console.log('----------')        
		console.log(index);    
		})
</script>  
函数对象的方法call()和apply():

在调用call()和apply()可以将一个对象指定为第一个参数,此时这个对象会成为函数执行时的this

calll()方法可以将实参在对象后依次传递:call(obj,3,5)

apply()的实参必须以数组形式传递:apply(obj,[3,5])

Date()对象:

js中用date对象来表示时间,创建一个Date对象:var time = new Date();

日期格式:月份/日/年 时:分:秒

getDay():获取日期:var data = time.getDay();

包装类:

js中提供了三种包装类,通过这三个包装类可以把基本数据类型转换成对象。

String():将基本数据类型字符串转成对象 var string = new String(’'hello‘’)

Number():将基本数据类型数字转成对象 var string = new String(4)

Boolean():将基本数据类型布尔值转成对象 var string = new String(true)

注意:开发中不会使用基本数据类型对象

字符串的方法:

indexOf():检测字符串是否含有指定的内容,有就返回第一次出现的索引,没有就返回-1

var str = 'hello’var re = str.indexOf(‘o’)console.log(re)

正则表达式:定义一些字符串的规则

语法:var 变量 = new RegExp(‘正则表达式’,‘匹配模式’)

使用字面量创建:var 变量 = /正则表达式/匹配模式 : reg = /a/i

var reg = new RegExp(‘a’):检查一个字符串中是否含有a

匹配模式:i : 忽略大小写 g :全局匹配

正则表达式方法:

test():这个方法可以检查一个字符串是否符合正则表达式的规则,符合返回true

var reg = new RegExp(‘a’) var st = ‘a’ var res = reg.test(st); console.log(res)
字符串和正则相关的方法:

split():可以将一个字符串拆分成一个数组,方法中可以传递一个正则表达式作为参数,这样方法会根据正则表达式拆分字符串: var reg = str.split(/[a-z]/),不设置全局也会拆分

search():可以搜索字符串中是否含有指定的内容,和indexOf差不多,方法中可以传递一个正则表达式作为参数,即使设置全局,也只会查到第一个

match():可以根据正则表达式,从一个字符串中将符合的内容提取出来 ,但是默认只会找到第一个符合的内容,找到后停止,可以设置匹配模式为全局,这样就会匹配所有内容

replace():将字符串中的指定内容替换成新的内容,参数1:被替换的内容,可为正则表达式作为参数;参数2:新的内容。默认只会替换第一个

Dom:操作网页文本对象

节点:常用节点有四类:

文档记录:整个html文档

元素节点:html中的各种标签

属性节点:元素属性

文本节点:html标签中的文本内容

Dom对象方法:

1.getElemenById():通过id属性获取一个元素节点对象

2.getElementsByTagName():通过标签名获取一组元素节点对象

3.getElementsByName():通过name属性获取一组元素节点对象 (表单)

4.getElementsByClassName():根据元素的class属性查询一组元素节点对象,ie下不行

5.document.querySelector():可以根据一个css选择器来查询一个元素节点对象;如果有多个满足,他只会返回第一个

var div = document.querySelector(’.box1’);

5.document.querySelectorAll():他会将符合的元素封装到一个数组中返回,即使只有一个,也返回一个数组;var div = document.querySelectorAll(’.box1’);、

6.appendChild():把新的子节添加到指定的节点

7.removeChhild():删除子节点

8.replaceChild():替换子节点

9.insertBefore():在指定的子节点前插入新的子节点

10.createAttribute():创建属性节点

11.createElement():创建元素节点

12.createTextNode():创建文本节点

13.getAttribute():返回指定的属性值

14.setAttribute():把指定的属性设置或修改为指定的值

获取元素节点的子节点:

1.getElementsByTagName():–方法–通过标签名获取一组元素节点对象

2.childNode–属性:表示当前节点的所有子节点;id = city ;city.childNode;但是会获取所有包括文本的子节点,即把标签间换行的空白作为文本节点;但children可以获取当前元素的所有子元素,获取元素则不会获取到文本了。

3.firstChild–属性:表示第一个子节点;fistElementChild:获取第一个子元素,ie8下不支持

4.lastchild–属性:最后一个子节点

获取父节点和兄弟节点:

parentNode:表示当前节点父节点

previousSibling:表示当前节点的前一个兄弟节点

nextSibling:当前节点后一个兄弟节点

通过js修改css样式:

元素.style.样式名 = 样式值:box.style.width = 200px;当遇到background-color这种有-号的改成驼峰backgroundColor,这样修改的都是内联样式。

当我们想获取样式表中的样式:

语法:元素.currentStyle.样式名,但是只有ie支持

其他浏览器可以用getComputedStyle():需要两个参数。第一个:要获取样式的元素,第二个:可以传递伪元素,一般为null:var wd = getComputedStyle(box1,null)

clientWidth/clientHeight:

这两个属性获取元素的可见宽度和可见高度,,包括内容区和内边距。边框和外边距不是。

offsetWidth/offsetHeight:
获取整个元素的宽度和高度,包括边框

offsetParent:获取当前元素的定位父元素,会获取到离当前元素最近的开启定位的祖先元素

offsetLeft/offsetTop:当前元素相对其定位父元素的偏移量。

scrollWidth/scrollHeight:获取整个滚动区域的宽度和高度

scrollLeft/scrollTop:获取水平滚动条和垂直滚动条的滚动距离,

当满足scrollHeight-scrollTop=clientHeght,说明垂直滚动条到底了

事件对象:

当事件的相应函数被触发时,浏览器每次都会将一个事件对象作为实参传递进响应函数,在事件对象中封装了当前事件的一切信息,如鼠标的坐标,哪个键盘被按下等

clientX/clientY:返回当事件触发时,鼠标指针的水平坐标和垂直坐标。

addEventListener():

一个事件只能添加一个相应函数,当定义第二个时会自动覆盖第一个,但是当我们想要给一个事件添加第二个相应函数时,可以使用addEventListener(),通过这个函数可给事件绑定函数。

参数1:事件字符串,不要on,如click。

参数2:回调函数:当事件触发函数被调用。

参数3.是否在捕获阶段触发事件,需要布尔值,一般默认false

div.addEventListener(‘click’,function(){ console.log(111) },false)

Bom:通过js操作浏览器,为我们提供了一组对象用来完成对浏览器的操作

window:代表整个浏览器窗口,同时也是网页中的全局对象

Navigator:代表当前浏览器信息,通过它可以识别不同的浏览器,可以通过userAgent判断

Location:代表当前浏览器的地址栏信息,通过location可以获取地址栏信息,或操作浏览器跳转页面

History:代表浏览器历史记录,由于隐私原因,不能获取具体的记录,只能在当次有效,可向前向后翻页

history.back():返回上一个页面,history.forward():跳转到下一个页面;history.go(2):2可以设置跳转几个页面整数向前,负数表示向后

Screen:代表用户的屏幕信息,可以获取用户显示器的相关信息

json:

就是一个特殊格式的字符串。这个字符串可以被任何语言识别,并转换成任意语言中的对象,主要用来数据传递

json和js对象的格式一样,只不过json字符串中的属性名必须加双引号,其他和js语法一致。

json分类:

1.数组:var arr = ‘[1,2,“hello”]’

2.对象:var obj = ‘{“name”:“zmy”,“age”:18}’

json中允许的值:1.字符串,2.数组,3.布尔值,4.null,5.对象,6.数组

将json字符串转化为对象:

js提供一个工具类叫JSON,这个对象可以将JSON转化为js对象,也可以将js对象转化为JSON

JSON.parse():将JSON转化为js对象

 var obj = '{"name":"zmy","age":18}'    
 var arr  = '[1,2,"hello"]'    
 var z = JSON.parse(obj)    
 console.log(z)

JSON.stringify():将js对象转化为JSON

eval():这个函数可以执行一段字符串形式的js代码,并将执行结果返回,但是执行的字符串有{},会将其当成代码块,如果不希望解析成代码块,可以在字符串前后加上()。但是不建议使用,执行性能差,还有安全隐患

闭包:

如何产生闭包:当一个嵌套的内部(子)函数引用了嵌套外部的(父)函数时,就 产生了闭包

1.闭包时嵌套的内部函数,2.包含被引用变量(函数)的对象。

产生条件:1.函数嵌套,2.内部函数引用了外部数据

常见的闭包:1.将函数作为另一个函数的返回值,2.将函数作为实参穿给另一个函数调用

闭包作用: 1.使函数内部变量在函数执行完后,仍然存活在内存中(延长局部变量的生命周期),2.让函数外部可以操作(读写)到函数内部的数据(变量/函数)

应用:定义具有 特定功能的js文件,将所有的数据和功能都封装在一个函数中,只向外暴露包含这些数据和功能的对象或函数,模块使用者就可以同过 对象调用相应的方法实现对应的功能

缺点:函数执行完后,变量占用内存没有释放,造成内存泄漏如:1.意外的全局变量,2.定时器启用没有停止,3.闭包

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值