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是一种真正的面向对象的语言,即使是开发简单的程序, ...
随机推荐
- 【bzoj2732】[HNOI2012]射箭 二分+半平面交
题目描述 给出二维平面上n个与y轴平行的线段,求最大的k,使得存在一条形如$y=ax^2+bx(a<0,b>0)$的抛物线与前k条线段均有公共点 输入 输入文件第一行是一个正整数N,表示一 ...
- 【bzoj1565】[NOI2009]植物大战僵尸 拓扑排序+最大权闭合图
原文地址:http://www.cnblogs.com/GXZlegend/p/6808268.html 题目描述 输入 输出 仅包含一个整数,表示可以获得的最大能源收入.注意,你也可以选择不进行任何 ...
- Codeforces Round #384 (Div. 2) 734E(二分答案+状态压缩DP)
题目大意 给定一个序列an,序列中只有1~8的8个整数,让你选出一个子序列,满足下列两个要求 1.不同整数出现的次数相差小于等于1 2.子序列中整数分布是连续的,即子序列的整数必须是1,1,1.... ...
- <转自原博客> NOIP2008 传纸条
小渊和小轩是好朋友也是同班同学,他们在一起总有谈不完的话题.一次素质拓展活动中,班上同学安排做成一个m行n列的矩阵,而小渊和小轩被安排在矩阵对角线的两端,因此,他们就无法直接交谈了.幸运的是,他们可以 ...
- 日常收集整理些js经典实例
跨浏览器添加事件 //跨浏览器添加事件 function addEvent(obj,type,fn){ if(obj.addEventListener){ obj.addEventListener(t ...
- linq使用 count与sum等
using System; using System.Data; using System.Configuration; using System.Linq; using System.Web; us ...
- Java工厂模式浅析理解
由于本人缺乏工作经验,本篇文章作为随笔,只是对工厂模式有一个简单的认识 工厂模式分为以下三种: 1:简单工厂(Simple Factory).2:工厂方法(Factory Method).3:抽象工厂 ...
- 通过hover修改其他元素
hover,我们都知道,是监听组件“悬停状态”的一个伪类. 我们一般通过hover来修改组件的背景什么的,很少涉及到太复杂的操作.也就是说我们一般只是对加了hover伪类的元素自身的样式进行改变,比如 ...
- 使用CSS3制作各种图形
1.正圆形 代码: HTML代码: <div class="circle"></div> CSS代码: .circle { width: 100px; he ...
- NetFlow流量采集与聚合的研究实现
http://www.21ic.com/app/analog/200907/44851.htm