zoukankan      html  css  js  c++  java
  • JS方面重点摘要(一)

    1、获取样式
    (1)style只能获取到行间样式的属性
    (2)火狐getComputedStyle(obj,null)[attr],IE:obj.currentStyle[attr]

    2、ready、onload区别:
    (1)ready 事件的触发,表示文档结构已经加载完成(不包含图片等非文字媒体文件),执行时机要早于onload
    (2)onload 事件的触发,表示页面包含图片等文件在内的所有元素都加载完成。

    3、闭包概念:
    (1)如何从函数外部读取局部变量?——在函数内部再定义一个函数,再return该函数。
    (2)JS允许使用内部函数(函数定义和函数表达式)位于另一个函数的函数体内,且这些内部函数可以访问它们所在外部函数中声明的所有局部变量、参数和其他内部函数。当其中一个这样的内部函数在包含它们的外部函数之外被调用时,就会形成闭包。
    (3)读取函数内部的局部变量;让变量的值始终保存在内存中。
    (4)闭包微观的理解:定义的时候确定作用域链,执行时候确定执行环境,创建活动对象,为活动对象添加arguments属性、和形参、函数引用。
    (5)定义和执行:函数作用域是在定义函数的时候确定的,而不是执行函数的时候。
    (6)JS垃圾回收机制:如果一个对象不再被引用,会被回收;如果两个对象互相引用,而不再被第3者所引用,则这两个互相引用的对象也会被回收。

    (7)静态封装环境,即模拟静态私有变量

    4、变量作用域
    (1)作用域链查找规则
    (2)没有块级作用域
    (3)变量声明会提前,赋值不会提前
    (4)不使用var都是全局变量,全局变量都是window的属性

    5、(1)函数自执行里面可以当做块级作用域

    (2)通过私有作用域隐藏私有变量,而且不需要实例化。

    6、html字符串转为jQuery对象;jQuery对象与dom对象互转。

    7、引用传递和值传递
    (1)基本数据类型和引用数据类型
    (2)在栈中定义一个特殊的变量,这个变量的取值等于数组或者对象在堆内存中的首地址(与C语言一样),在栈中的这个特殊的变量就变成了数组或者对象的引用变量。栈中的变量指向堆内存中的变量,这就是 Java 中的指针。引用变量实际上就是指向堆内存里内容的指针。
    (3)修改引用变量,被引用的对象也会修改。若不想同时修改,就B.prototype[i] = createObject.prototype[i]这样循环开辟新的内存空间。

    8、(1)this指向机制:在一个函数上下文中,this由调用者提供,由调用函数的方式来决定。如果调用括号()的左边是引用类型的值,this将设为引用类型值的base对象,在其他情况下(与引用类型不同的任何其它属性),这个值为null。不过,实际不存在this的值为null的情况,因为当this的值为null的时候,其值会被隐式转换为全局对象。

    (2)构造函数中的this新创建的对象实例

    9、定时器的工作机制:循环执行过程中,几乎同时设置了5个定时器,一般情况下,这些定时器都会在1秒之后触发,而循环完的输出是立即执行的。

    10、深浅拷贝问题:
    (1)利用数组方法concat()/slice()可以实现数组的浅拷贝

      如果concat的数组都是基本类型,那么返回的副本互不影响;如果包含引用类型,那么就是浅拷贝

    (2)简单粗暴实现数组深拷贝的方法:先JSON.stringify(),在JSON.parse()

      var new_arr = JSON.parse( JSON.stringify(arr) );new_arr[3][0] = 'new';

      改变new_arr就不会对原来有影响。

    (3)浅拷贝的实现:遍历对象,然后把属性和属性值放入一个新对象(只拷贝对象,判断是数组还是对象、hasOwnProperty())
    (4)深拷贝的实现:在拷贝的时候判断属性值类型,如果是对象,就递归调用深拷贝函数

    (5)深拷贝函数原生js实现

    11、循环事件绑定方法
    (1)采用闭包(node(i)和i当变量传)
    (2)采用新增索引值(node(i).index = i,把i值赋予新加的变量,然后this.index获取)
    (3)ES6块级作用域变量声明let
    (4)采用new关键字
    (5)forEach()方法

    12、原型的应用
    Object.create(obj);//返回一个对象,其原型为参数obj对象。
    var b=Object.create(a),b没有的属性就从原型a上去找,b有的属性就取自己的属性

    13、new创建对象发生的事情(四步):
    (1)创建一个对象实例
    (2)将构造函数作用域赋值给新对象(因此this指向该新对象)
    (3)执行构造函数代码(该执行指的是为这个新对象添加属性)
    (4)返回新生成的对象实例
    有return的函数在new时对this的影响(正常的构造函数是没有return语句):如果return的是一个对象,那么this会指向返回的对象,如果return的不是一个对象或null(null是特例),那么this还是指向函数的实例。

    (5)如果函数中的this被不包含子对象的对象所调用,那么this指向的就是调用它的对象。如果函数中的this被包含多级对象的对象调用,this指向的也只是它上一级的对象

    14、事件冒泡
    (1)阻止事件冒泡的方式(return false;event.stopPropagation())、
    阻止默认事件的方式(return false;event.preventDefault())
    (2)冒泡机制:3种
    (3)不能冒泡的事件:blur、focus、load、unload等

    15、事件代理和事件委托
    (1)利用事件冒泡,只指定一个事件处理程序,就可以管理某一类型的所有事件
    (2)事件捕获、事件目标、事件冒泡机制理解
    (3)当用事件委托的时候,根本就不需要去遍历元素的子节点,只需要给父级元素添加事件就好了,其他的都是在js里面的执行,这样可以大大的减少dom操作,这才是事件委托的精髓所在。
    window.event、ev.target、ev.srcElement、target.nodeName(兼容性)

    16、JSON
    (1)判断字符串是否是json字符串方法:try/catch、JSON.parse()成功、字符串包含{
    (2)语法规则:键名必须使用双引号。json的本质是一个字符串
    (3)stringify()、toJSON()、parse()

      过滤器和函数参数

      还原函数的注意事项

    17、for循环里的ajax问题
    (1)设置async:false改为同步
    (2)在异步返回的回调函数里递归调用

    18、判断数据类型
    (1)typeof val === "number" 有问题(因为typeof NaN === "number"),所以需要加上 && isFinite(val)
    (2)布尔型、string型、undefined,直接用typeof
    (3)对象类型,需要排除null和undefined
    (4)null直接判断===即可
    (5)数组类型typeof为object,所以不能判断
    一种:Object.prototype.toString.apply(arr)==='[object Array]'
    二种:排除null和undefined,然后arr.constructor === Array

  • 相关阅读:
    微信内置浏览器 如何小窗不全屏播放视频?也可以尝试canvas.
    正则替换replace中$1的用法以及常用正则
    去掉textarea和input在ios下默认出现的圆角
    让ckplayer支持m3u8格式的播放
    ios中的safari转换时间戳问题
    JavaScript判断不同平台
    swiper实现臭美app滑动效果
    开启CSP网页安全政策防止XSS攻击
    <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
    设置元素text-overflow: ellipsis后引起的文本对齐问题
  • 原文地址:https://www.cnblogs.com/goloving/p/8476686.html
Copyright © 2011-2022 走看看