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
JS方面重点摘要(一)的更多相关文章
- JS方面重点摘要(二)
1.函数声明与函数表达式 (1)变量声明会置顶提前,但赋值仍在原地方(2)函数声明同变量声明一样会提前:但是,函数表达式没有提前,就相当于平时的变量赋值(3)函数声明会覆盖变量声明,但不会覆盖变量赋值 ...
- JS划重点——类和对象的不正经阐述
JS划重点--类和对象的不正经阐述 /在JS 类里面函数也是一个对象,那么要创建一个对象就需要一个类,这个类可以由这个对牛逼的对象-函数来实现/ /首先是普罗大众都会的 工厂模式来创建一类/ func ...
- Java基础进阶:内部类lambda重点摘要,详细讲解成员内部类,局部内部类,匿名内部类,Lambda表达式,Lambda表达式和匿名内部类的区别,附重难点,代码实现源码,课堂笔记,课后扩展及答案
内部类lambda重点摘要 内部类特点: 内部类可以直接访问外部类,包括私有 外部类访问内部类必须创建对象 创建内部对象格式: 外部类.内部类 对象名=new外部类().new内部类(); 静态内部类 ...
- Java基础进阶:多态与接口重点摘要,类和接口,接口特点,接口详解,多态详解,多态中的成员访问特点,多态的好处和弊端,多态的转型,多态存在的问题,附重难点,代码实现源码,课堂笔记,课后扩展及答案
多态与接口重点摘要 接口特点: 接口用interface修饰 interface 接口名{} 类实现接口用implements表示 class 类名 implements接口名{} 接口不能实例化,可 ...
- Java基础进阶:继承重点摘要,继承详解,方法重写注意事项,方法重载与重写的区别,抽象类,代码块, 附重难点,代码实现源码,课堂笔记,课后扩展及答案
继承重点摘要 *继承的特点: 子类在初始化之前,一定要先完成父类数据的初始化 子类在初始化之前,一定要先访问父类构造,完成父类数据的初始化 系统在每一个构造方法中默认隐藏了一句super(); 如果我 ...
- js学习重点难点知识总结 (巩固闭包、原型、原型链)
学习重点知识总结 1.闭包知识点巩固 闭包函数: 1.可以实现函数外部访问函数内部的变量 2.在Java ...
- JS DOM重点核心笔记
DOM重点核心 文档对象模型,是W3C推荐的处理可扩展的标记语言的标准编程接口 我们主要针对与勇士的操作,主要有创建.增加.删除.修改.查询.属性操作.事件操作 三种动态创建元素的 ...
- js一些重点知识总结(二)
第一部分:数据类型转换 1) 数据类型的种类: 数值型number.布尔型(true(1) /false (0)).字符串型(String).空类型(null)(object) 2) 数据类型自动转换 ...
- js一些重点知识总结(一)
1.javaScript与java的区别?(从它们的解释,运行等方面说) 第一,javascript是基于对象的,而java是面向对象,即java是一种真正的面向对象的语言,即使是开发简单的程序, ...
随机推荐
- C# 在子窗体调用父窗体的值(转)
1.在父窗体中 public delegate void SetVisiableHandler();//定义委托类型 注意此委托定义在namespace下一级,在form类外 private void ...
- CentOS Linux上搭建PPPoE服务器及拨号设置
CentOS Linux上搭建PPPoE服务器及拨号设置 搭建PPPoE,成功了的话,就觉得超级简单,在CentOS Linux更是5步左右就能搞定. 1.安装pppoe,安装完成后,会有pppoe- ...
- 2017 多校4 Security Check
2017 多校4 Security Check 题意: 有\(A_i\)和\(B_i\)两个长度为\(n\)的队列过安检,当\(|A_i-B_j|>K\)的时候, \(A_i和B_j\)是可以同 ...
- NOI退役啦
没进前一百 签的上交一本 高三加油喽
- MySQL数据库从windows迁移到linux
前几天搭建了lamp环境,想把之前写的小东西迁到linux上运行,涉及到把mysql数据库的文件迁移到linux上,直接用fileZilla传过去应该不行,我试了下,反正没成功.下面是我采用的方法: ...
- 我们曾经心碎的C#之 第一章.我的第一个C#程序
第一章. C#入门 1.1 .NET与C# 001..NET是Microsoft.NET的简称,是基于Windows平台的一种技术 ...
- HDU 5251 矩形面积(二维凸包旋转卡壳最小矩形覆盖问题) --2015年百度之星程序设计大赛 - 初赛(1)
题目链接 题意:给出n个矩形,求能覆盖所有矩形的最小的矩形的面积. 题解:对所有点求凸包,然后旋转卡壳,对没一条边求该边的最左最右和最上的三个点. 利用叉积面积求高,利用点积的性质求最左右点和长度 ...
- Linux Mint---更新软件源
安装完系统之后第一件事情就是更新软件源,为接下来的各种工作作准备,这个也很简单,直接打开software source设置一下, 然后打开software manager更新一下就好了.
- BEE网站
http://www.bee-framework.com/ http://syxiaqj.github.io/2014/02/28/bee-learning-1/#0-tsina-1-24637-39 ...
- Video for Linux Two API Specification Revision 2.6.32【转】
转自:https://www.linuxtv.org/downloads/legacy/video4linux/API/V4L2_API/spec-single/v4l2.html Video for ...