老三样的一些考点

一、new 一个新对象的过程
当我们new一个构造函数的时候,得到的实例继承了构造器的构造属性(this.name等)以及原型上的属性

大体上是4步走
1.创建一个空对象 var obj = {}
2.设置新对象的constructor属性为构造函数的名称,继承函数的原型
3. 使用新对象调用函数,函数中的this被指向新的实例对象
4.将初始化完毕的新对象地址保存到等号左边的变量中

二、css页面的优化方案
1.减少css样式嵌套
2.多使用公共样式类
3.减少通配符的使用
4.减少使用表达式(例如定时改变背景颜色的语句)
5.缩写margin-left等为margin

三、Vue的组件通信
1.父子传值
props和$emit

2.$emit $on
通过一个空的Vue实例作为中央事件总线,用它来触发事件和监听事件,可以做到父子、兄弟、跨级

定义一个空的实例
var Event = new Vue()

在需要传出去的对象的methods方法中定义一个 Event.$emit(‘data+a’,this.name)

在需要接收值的对象的mounted()中添加 Event.$on(‘data-a’,name => {
this.name = name
}

3.Vuex
一个单项数据流,在全局拥有一个State存放数据,通过mutations

4.ref

在这里插入图片描述
就是在子组件添加一个ref属性,然后在父的生命周期回调函数mounted中定义一个变量赋值为this.$refs.xx, xx为ref属性的值

5.$attrs / $listeners

6.provide/inject
在父组件中添加provide{ 属性名:属性值 }
在子组件使用inject:[属性名] 然后就可以通过this调用了

四、浏览器运行js的过程

放在body的尾部是因为他会阻塞渲染

js是单线程,浏览器是多线程
js不能创建线程,不能开展并行任务,不能对线程操作

在这里插入图片描述
心得:
浏览器渲染就是五步走,htmlDOM树,css的CSSOM树,合并渲染书,计算节点位置,渲染到屏幕
css文件和js文件都会引起阻塞,这是因为css和js中的内容可能会改变最终结果,所以必须阻塞
但这种阻塞并不影响DOM解析,也不会影响浏览器对外部资源做的预处理
css的阻塞是指link引入的文件css,而不是style标签中的,后者是html解析器解析的
其实浏览器在不断的进行渲染

可能会引起回流的,基本都是关于尺寸布局修改,颜色样式之类的只会引起重绘
1.页面首次渲染
2.浏览器窗口大小发生变化
3.元素尺寸或位置发生变化
4.元素内容变化
5.元素字体大小变化
6.添加或删除可见的DOM元素
7.激活伪类
8.设置style属性
9.查询某些属性或者调用某些方法

五、 == 的终章
首先五个基本数据类型:undefined,null,String,Boolean,number

1.undefined == null //true
2.undefined,null和其他类型值比较都是输出 false
3.String,number,Boolean比较的时候都转换成数字再比较
4.当对象类型和string,Boolean,number比较的时候
先调用对象的valueOf方法,如果返回一个原始类型的的值,则会用该值与之比较,否则执行下一步
调用tostring方法,如果返回一个原始类型的值,则会用该值与之比较。否则两个不等

注:
undefined
null
-0
+0
NaN
‘’(空字符串)
这及格转化布尔值为false,其他都是true

所以[ ] == ![ ] 会成立,顺序是 => [ ] == false => 0 == false
!把目标变成布尔值 把[ ]变成了0(如果是{ },是转换成NaN,他并不是数字)

六、src和href的区别

在html引入css

<link href = "路径 " rel = "stylesheet" type = "text/css">

在html引入js文件

<script src = "路径" type = "text/javascript">

href全称Hypertext Reference,超文本引用
在加载它的时候,不会停止对当前文档的处理,浏览器会继续往下走。常用在a、link标签

src是source的缩写
表示对资源的应用,它指向的内容会嵌入到当前标签所在的位置,由于src的内容是页面必不可少的一部分,因此浏览器在解析src时会停下来对后续文档的处理,直到内容加载完毕。经常用在script、img、iframe标签中

总的来说,link是表示引用关系,而src更像是用引用的资源直接替代当前标签,并且会阻塞

另一个css
兼容性差,属于css范畴,页面完全载入后才会加载,前面的那个是同时加载的

<style type="text/css">
@import + 空格 +url(外部css的路径)
</style>

七、bind的实现
bind和apply,call的区别就在于他是创了一个新函数,不会直接调用,而call是直接调用的

 Function.prototype.bind = function () {
	        var self = this,                        // 保存原函数
	        context = [].shift.call(arguments), // 保存需要绑定的this上下文
	        args = [].slice.call(arguments);    // 剩余的参数转为数组
	        return function () {                    // 返回一个新函数
	            self.apply(context,[].concat.call(args, [].slice.call(arguments)));
	        }
	    }			
				
				

八、解释性语言和编译性语言

编译性语言
只要编译一次就可以把源代码编译成机器语言,后面的执行无需重新编译,直接使用前面的编译结果,执行的效率很高
缺点:依赖编译器,跨平台性差

解释性语言
源代码不能直接翻译成机器语言,而是先翻译成中间代码,再由解释器对中间代码进行解释运行
程序不需要编译,程序在运行的时候采访一层机器语言,每次执行都需要重新翻译
python,js,shell
效率低但是跨平台性强

九、webSorket

Socket是传输层的协议

Websocket是应用层的协议,在单个TCP连接上进行全双工通信的协议。
他实现了服务器端主动向客户端发送请求,可以替代麻烦的持续轮询来保证最新的信息变化。
只需要一次握手

和http的区别,http不支持持久性的连接
websocket是一个持久化的协议
都是应用层协议,依靠下层传输层的TCP
但都是用的是http请求,只不过后者websocket在请求头和响应头里面都有特殊字段,告诉浏览器和服务器协议转换

十、josn

json全程JavaScript Object Notation 一种轻量级的数据交换格式,采用完全独立于语言的文本格式,是理想的数据交换格式
在js中处理josn数据不需要任何特殊的api或者工具包

在josn中,两种结构
对象和数组

1.对象
var person = {“name”:“Liaz”,“number”:“152”};

一个对象以 { 开始, } 结束,“key/value”之间使用逗号隔开

2.数组
var person = [ {“name”:“Liaz”,“number”:“152”}, {“name”:“Liayhz”,“number”:“785”}];

数组式值的有序集合。[ 开始 ] 结束 中间逗号分开


josn对象和josn字符串之间的转换

字符串

var jsonStr ='{"name":"Liza", "password":"123"}' ;

字符串比对象最外层多了单引号

对象

var jsonObj = {"name":"Liza", "password":"123"};

字符串转换成对象

在这里插入图片描述

var q = JSON.parse§;
var q = eval(’(’+p+’)’)
var q = (new Function("return "+p))(); 就是这三种,第一种对字符串更严格点 具体用的时候是三个参数,第二个是null,第三个才是数字

对象转换成字符串

var jsonstr =JSON.stringify(jsonObject );

转换成字符串的方法还有一个可选参数space,可以指定缩进格子,填数字


josn字符串替换
其实就是用正则

var jsonstr = josnstr.replace(new RegExp'\\"',"gm",'"'

遍历josn对象和json数组

遍历对象 直接for in

var packJson  = {"name":"Liza", "password":"123"} ;
 
for(var k in packJson ){//遍历packJson 对象的每个key/value对,k为key
   alert(k + " " + packJson[k]);
}

遍历数组


var packJson = [{"name":"Liza", "password":"123"}, {"name":"Mike", "password":"456"}];
 
for(var i in packJson){//遍历packJson 数组时,i为索引
   alert(packJson[i].name + " " + packJson[i].password);
}

name这里都成了他的属性,而遍历对象的时候,name这些都算是他的键key

josn读内部属性的时候可以用“.”的形式像访问属性一样访问,也可以用"[ ] "的形式访问,数字好像只能用后者

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值