2020知识点总结-更新中

split、splice、slice区别
  • stringObject.slice(start,end) 方法可从已有的数组中返回选定的元素。返回一个新的数组,包含从
    [start,end) 的 arrayObject 中的元素。
  • arrayObject.split(separator,howmany)分割字符串,返回数组,第二个参数是返回数组的最大长度。
  • arrayObject.splice(index,howmany,item1,…,itemX)
    修改原数组,删除index起的howmany个元素,并在index前插入item1-itemX元素。返回删除元素的数组
for…in语句

用于遍历对象或数组的属性。遍历时会枚举原型链上的所有属性,过滤这些属性的方式是使用 hasOwnProperty函数。

Object.prototype.method=function(){
  console.log(this);
}
var myObject={
  a:1,
  b:2,
  c:3
}
for (var key in myObject) {
    if(myObject.hasOwnProperty(key)){
        console.log(key);
    }
}
数组去重
 Array.prototype.unique = function()  {
    var obj = {}
     return arr.filter((item, index, arr) => {
         return obj.hasOwnProperty(typeof item + item) ? false : (obj[typeof item + item] = true)
     })
 }
 var arr = [1,1,'true','true',true,true,15,15,false,false, undefined,undefined, null,null, NaN, NaN,'NaN', 0, 0, 'a', 'a',{},{}];
 console.log(arr)
 console.log(arr.unique())
获取userAgent
function getBrowser() {
  let obj = {}
    obj.appName = navigator.appName
    obj.version= navigator.appVersion
    obj.code = navigator.appCodeName
    obj.userAgent = navigator.userAgent
    return obj
}
console.log(getBrowser())
如何阻止冒泡
ev.stopPropagation();
ev.cancelBubble = true; // 旧IE
原型与原型链

(1)原型就是一个属性,这个属性是构造函数的属性,构造函数是用来制造用来出对象的,是构造函数制造出来的公共祖先,后面所有的对象都会继承原型的属性与方法(原型也是个对象)

(2)__proto__这个是用来查看原型的,这个是对象的属性,这个属性可以查看但是不能修改(隐式属性)

(3)prototype 设置原型,这个是构造函数的属性

(4)proto === constructor.prototype

(5)原型链就是__proto__连起来的链条,当js查找对象属性时,先查找对象本身是否存在该属性,不存在,则会在原型链上找,但不会查找自身prototype。

get和post区别,何时使用post

GET:一般用于信息获取,使用URL传递参数,对所发送信息的数量也有限制,一般在2000个字符
POST:一般用于修改服务器上的资源,对所发送的信息没有限制Get 是通过地址栏来传值
Post 是通过提交表单来传值
在以下情况中,请使用POST 请求:

  1. 无法使用缓存文件(更新服务器上的文件或数据库)
  2. 向服务器发送大量数据(POST 没有数据量限制)
  3. 发送包含未知字符的用户输入时,POST 比GET 更稳定也更可靠
css阻塞、js阻塞

当浏览器在下载js时,会阻止其他一切活动,比如资源下载,内容呈现等。直到js下载、解析、执行完毕后才开始继续并行下载其他资源和内容呈现。
嵌入js会阻塞所有内容呈现,外部js会阻塞其后内容呈现。
当css后面跟着嵌入的js,该css就会出现阻塞后面资源下载的情况。而把嵌入的js放在css前面,就不会出现阻塞的情况。
解决方式:

  1. 将脚本放在底部。< link >还是放在head中,用以保证在js加载前能正常加载页面。< script >放在< /body>前。
  2. 限制script总数。
  3. 动态脚本元素。无论在何处启动下载,文件额下载和运行都不会阻塞其他页面处理过程,即使在head里(除了用于下载文件的http 链接)。
<script>
	var script = document.createElement('script')
	script.style="text/javascript"
	script.src="file.js"
	document.getElementByTagName("head")[0].appendChild(script)
</script>
同源策略

协议,域名,端口相同,同源策略是一种安全协议,指一段脚本只能读取来自同一来源的窗口和文档的属性。

哪些操作会导致内存泄漏
  1. setTimeout第一个参数使用字符串而非函数。
  2. 闭包。
  3. 控制台日志。
  4. 循环(两个对象彼此引用且彼此保留时)
快速排序
function sort(arr) {
            if(arr.length === 1) {
                return arr
            }
            let less = []
            let generator = []
            let centerIndex = Math.floor(arr.length/2)
            let centerValue = arr.splice(centerIndex,1)[0]
            console.log(arr)
            for(let i = 0;i<arr.length;i++) {
                if(arr[i]<centerValue) {
                    less.push(arr[i])
                }else {
                    generator.push(arr[i])
                }
            }
            return sort(less).concat(centerValue,sort(generator))
        }
        console.log(sort([5, 100, 6, 3, -12]))
dom中如何隐藏元素

利用opacity: 0 设置透明度为0;(占位置)
利用visibility:hidden;(占位置)
利用display:none;(不占位置)

css的伪类和伪元素

伪类用于在页面中的元素处于某个状态时,为其添加指定的样式。

伪元素会创建一个抽象的伪元素,这个元素不是DOM中的真实元素,但是会存在于最终的渲染树中,我们可以为其添加样式。

vue中data为什么要用函数返回

vue为了保证每个实例上的data数据的独立性,规定了必须使用函数,而不是对象。

因为使用对象的话,每个实例(组件)上使用的data数据是相互影响的,这当然就不是我们想要的了。对象是对于内存地址的引用,直接定义个对象的话组件之间都会使用这个对象,这样会造成组件之间数据相互影响。

发布了27 篇原创文章 · 获赞 4 · 访问量 2815

猜你喜欢

转载自blog.csdn.net/qq_39083496/article/details/103999461