JS笔记one

基本数据类型:Number String Boolean undefined null (null使用, 1,初始对象赋值null 2 .结束时垃圾回收对象)
引用数据类型: Object Function(特殊对象) Array(特殊对象)
typeof 结果是字符串 不能判断null Array 他们是Object 所以typeof null !=null ,Array同理
a instanceof A:a是A的实例对象,判断a的具体类型
任何类型与string相加都等于字符串,其他与Number运行都为Number
null=undefinded:==都会向Number转换
null ==0 false

基本数据类型和引用数据类型:
栈 :变量 对象的地址
堆 :对象的内容

全局作用域和函数作用域:
作用域是开始就确定的,执行上下文是调用之后,执行之前确定
全局作用域下变量/函数都为window对象的属性
!!函数作用域变量会一级一级往上找
函数内部没有var定义变量默认为全局变量(设置了形参相当于函数作用域)

函数声明提升和变量声明提升:
变量声明和函数声明都会被提前(但是注意匿名函数/变量是先声明变量后赋值函数体/变量值)

全局/函数-执行上下文(栈存储):
在开始执行全局代码前,将全局定义的数据进行预处理:var 变量 >undefined 添加为window的属性
function fun
>赋值fun 添加为window的方法
this指向window3
var c = 1; var x=10
function c© { function fn(){clg(x)}
console.log©; function show(f){ var x=20 ,f()【此处调用函数x往外找,先找fn,再找window,所以输出10】}
} show(fn)
c(2);//报错

定义函数:命名函数表达式函数只能在函数体内有效 var foo =function bar(){}【bar只在bar()内有效】
function fun( ){}
var xx=function(){} 匿名函数
函数本身也是对象
var fun =new Funtion()
实参可以是对象
fun():返回值
fun:函数对象

立即执行函数:只会执行一次,不用引用,直接执行,利用闭包自定义Js模块:JQuery
(function(){ }:匿名函数)()

!!!闭包:2个条件:定义时产生闭包,成为垃圾对象时销毁
当一个【嵌套】的内部(子)函数【引用】了嵌套的外部(父)函数的变量(函数)时,就产生闭包。
1.闭包时嵌套的内部函数
2.包含被引用变量(函数)的对象
用法:
1.将内部函数作为外部函数的返回值
2.将函数作为实参传递给另一个函数
作用:
1.使用函数内部的变量在执行完后,仍然存在内存中,延长局部变量的生命周期
2.让函数外部可以通过闭包操作函数内部的数据

this指向:1.以函数调用,this指向window
2.以方法调用,this指向调用方法的对象
3.以构造函数调用,this指向创建的对象
4.使用call/apply时,this指向指定的对象
5.【匿名函数中的this在没有明确挂载的时候具有全局性】
6.【箭头函数的this是在【定义函数时】绑定的,继承上下文的this,不是在执行过程中绑定的。】
7.【setTimeout改写所传函数的this, 也就是this指向window。】
call和apple :函数对象的方法,改变函数this的指向
函数对象.call/apply (obj,实参/【实参】)
arguments:封装实参的类数组对象
https://www.cnblogs.com/jeodeng/p/10658590.html

定义对象:
var obj={name:xx,} 【开始时对象内部数据确定,创建多个对象代码冗余】
var obj=new object()【开始时不确定对象内部数据,代码冗余】
使用工厂方法创建大量对象 【一般不用,需要创建多个对象,对象没有具体类型,都是Object】
function xxx(x,x,x,x){
var obj = new object()
obj.x=x

return obj
}
构造函数:用new调用
1、创建一个全新的对象
2、将全新的对象的原型指向该函数的原型对象上
3、新对象绑定this
4、将this返回
function Person(){this.name=xx}
var people = new Person()this指向people
存在缺陷:如果构造函数中有方法,则new几个对象就会创造几个方法,浪费内存。
解决方法1:将方法定义为全局作用域,(不安全)
解决方法2:可以将实例对象中共有的属性、方法放到原型对象中去
类名.prototype.属性/函数名=属性值/function(){} 可以用obj[xxx]处理含有特殊字符

定义属性和属性名:
obj.xx
obj[xx]:更灵活可以是变量,变量名不确定,属性名含有特殊字符

in: 属性 in 对象 :检查对象内是否有该属性
for xx in obj:枚举对象

原型对象:
每一个函数都有一个隐藏的原型对象prototype
对于构造函数,其创建的每一个实例都有一个一个隐含属性__proto__来访问原型对象
所有函数的隐式原型,都指向Function的原型
所有的函数原型的隐式原型,都指向Object的原型
原型链:先访问实例本身属性,没有就访问构造函数原型对象,
再没有就访问Object原型对象,再到null
原型实例继承:
让子类型的原型对象指向父类型的实例
子类.prototype= new 父类()
子类.prototype.constructor=子类

页面中打印一个对象时是直接调用toString方法,可以 [类.prototype/实例].toString=function()重写toString
!!!!垃圾回收机制:当没有变量指向对象时,对象会自动销毁!!!!

数组创建:var arr =new Array([1,2,3,4]) /arr=【1,2】
修改arr.length的值过短会裁剪,过长会null填充

数组方法:
不会改变原数组
concat():连接数组
join():数组-》字符串
slice(开始索引,结束索引):裁剪元素
会改变原数组:
pop():删除并返回最后一个元素
push():在最后添加元素返回数组长度
shift():删除并返回第一个元素
unshift():在开头添加元素返回数组长度
splice(开始索引,删除几位,拼接值。。。):拼接元素,返回裁剪值
sort() 在对数字排序时,要用回调函数 返回大于0换位置,反之不换
reverse()反转数组

显示迭代:arr.forEach((element,index,obj)=>{})

Date对象:
var d=new Date(格式化时间)
包装类: 将基本类型转换为对象
new String() Number() Boolean()【一般不用定义引用数据,不然定义是object类型】
浏览器会临时使用包装类将基本数据类型转换为对象,然后使用对象的属性和方法

串行化:str=json.stringify(json)
反串行化:json=json.parse(str)

String方法:
charAt():返回指定位置字符
indexof(‘’,【开始位置】):返回指定字符的第一次出现索引
split():字符串=》数组
search(【正则表达式】):搜索是否含有指定内容,返回首次索引
match(【正则表达式】):搜索是否含有指定内容,返回内容
replace(old,new):用new替换old
正则表达式:符合规则的字符串
var reg = new RegExp(‘正则表达式’,‘匹配规则’)
reg = /正则表达式/匹配规则
正则表达式:【* + ?】
【…】:匹配所有…字符
【a-z】:匹配所有小写字母
【A-Z】:匹配所有大写字母
【^…】:匹配除了…字符
【…】:匹配所有…字符
i:忽略大小写 g:全局搜索 m:匹配多行
reg.test(字符串 ):验证字符串是否符合正则表达式
DOM:document object model文档对象
获取节点:
document.getElementById():通过ID获取元素节点
document.getElementByTagName():通过标签名获取一组元素节点
document.getElementByName():通过name属性获取一组元素节点
元素节点.first/lastChild: 获取该节点的第一/最后一个节点(包括空白)
document.body:获取body节点
document.documentElement:获取Html根目录
document.querySelector():通过css选择器查询节点对象,放回第一个元素
document.querySelectorALL():通过css选择器查询节点对象,放回多个元素数组保存

增删节点:
document.write():创建内容直接写入dom内容,可以解析dom,但是使用会重绘页面
document.creatElement(元素名):创建一个元素节点 //也可以用innerHtml
document.creatTextNode(文本内容):创建一个文本节点 // 节点.innerHtml
父节点. appendChild(子节点):父节点加入字节点
父节点.insertBefore(新的子节点 , 指定子节点)
子节点.parentNode.removeChild(删除的子节点对象)

操作节点:
节点.属性=‘值’
节点对象.setAttribute(“属性名” , "属性值")
节点对象.getAttribute("属性名")
节点对象.removeAttribute("属性名")

修改样式:(如果样式名中含有-号,要改成驼峰命名法)例如 background-color=》backgroundColor
元素.style.样式名=属性名 【读写改的是内联样式】

IE8浏览器:元素节点.currentStyle.样式名=属性名 【读取当前显示样式 ,只有IE支持】
正常浏览器:getComputedStyle(元素节点,null)【window方法,读取当前所有样式】

样式其他属性:
clientWidth/Height : 元素可见宽高,包括内容区,内边距
offsetWidth/Height: 整个宽高,包括内容区,内边距,边框

offsetParent:获取当前元素定位父元素
offsetLeft/Top:获取当前元素定位父元素的水平偏移量

scrollWidth/Height:获取整个滚动区域高度
scrollLeft/Top:获取整个滚动条移动距离
在元素内:clientWidth==scrollWidth-scrollLeft判断是否滑底

浏览器加载顺序(入口函数):
window.οnlοad=function(){js代码}
兼容性处理:
判断对象的属性/方法是否存在
事件:
当事件的响应函数被触发时,都会传递一个event实参作为形参,
event.stopPropagation()【取消冒泡】和event.preventDefault()【取消默认】,
return false是取消默认行为和取消冒泡
事件冒泡:
子元素的事件被触发,其祖先元素的事件也会触发
取消冒泡:event . cancelBubbl=true
事件委派:将事件统一绑定给所有元素的祖先元素,利用事件冒泡,当子孙元素触发时会冒泡到祖先
event.target 返回触发的元素
事件绑定:
使用元素.on事件=function(){}:同一个事件只能绑定一次;后面会覆盖前面的
【注意:for绑定事件时是先绑定,再触发时执行函数】
绑定多个事件(不支持IE8):元素.addEventListener(‘事件不加on’,function,false表示不在捕获阶段出发)
IE8:attachEvent(‘事件加on’,回调函数(){ 改成callback.call(obj)})注意this指向window,就指向obj
滚轮事件 : onmouseWheel
键盘事件 :onkeydown/up 一般是可以获取焦点对象(input)或者doucment
event.KeyCode 返回触发键盘
event.ctrlKey
event.shiftKey
event.altKey
BOM对象:浏览器对象

定时器思考:定时器执行一般会有一点小延迟,有坑会延迟很长时间
Js是单线程的,Settimeout是异步宏任务,所以代码执行遇到异步的,就放在事件队列中的,
等线程中的任务执行完后才会执行事件队列中的任务。

进程与线程机制:
应用程序运行在某个进程的某个线程上,一个进程至少由一个运行的线程(单线程),
也可以同时运行多个线程(多线程),一个进程内数据可以供其中多个线程共享,
多个进程之间数据不共享。
Js是单线程运行,但是使用H5的Web Workers可以多线程运行

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值