javascript笔记

对象 隐式原型__proto__对象的隐式原型指向构造该对象的构造函数的原型,这也保证了实例能够访问在构造函数原型中定义的属性和方法。
方法有的特殊 原型属性(prototype)这个属性是一个指针,指向一个对象,这个对象的用途就是包含所有实例共享的属性和方法
(我们把这个对象叫做原型对象)。原型对象也有一个属性,叫做constructor,这个属性包含了一个指针,
指回原构造函数。
原型属性有的constructor指回构造函数

函数构造对象
this指向调用
所有的 JavaScript 对象都会从一个 prototype(原型对象)中继承属性和方法
constructor 属性返回对象的构造函数
Person 对象
获取ID双层for循环 找到事件 闭包的概念 面向过程 面向函数 面向对象

单机方法
funtin
for
for
s = this;//暂时保存
(funtin(){
s,
译名闭包
}())
classList 方法 add

vue,react直接上手,退一步也是jquery了
多开发项目
sort

1、alert(); 弹窗效果
2、console.log(); 控制台输出
3、document.write(); 页面文档输出

三、变量的命名和赋值
1、变量 var count; count=10;

四、数据类型
1、number 小数或者是整数统称是number(数值类型)
2、string var str = "asd"; 可以是单引号或者双引号
3、boolean var bool = true; 布尔值 值为true或者是false
4、undefined 只定义未赋值
5、null 引用类型(object)
let 和 const 都是块级声明的一种
1.不会被提升
2.重复声明报错
3.不绑定全局作用域
const 用于声明常量
const 声明不允许修改绑定,但允许修改值
在for中每次迭代循环时都创建一个新变量,并以之前迭代中同名变量的值将其初始化
btn.addEventListener('click', showFn, false);
btn.removeEventListener('click', showFn, false); 解绑事件
需要注意的是IE8级以下版本不支持addEventListener和removeEventListener,需要用attachEvent和detachEvent来实现:
这里我们不需要传入第三个参数,因为IE8级以下版本只支持冒泡型事件 捕获从里到外,冒泡从外到里
程序员客栈
1、弹出框:
alert(); 页面弹出事件
console.log();控制台输出
document.write(); 文档页面输出

获取元素方式:
1、获取ID: document.getElementById
2、通过类名 document.getElementByClassName
3、通过name属性 document.getElementByName
4、通用的 document.querySelector("# . 标签")

事件:
单击事件:onclick
鼠标移入:onmouseover
鼠标移出:onmouseout
失去焦点事件:onblur
键盘弹起事件:onkeyup
键盘按下事件:onkeydown
表单提交事件:onsubmit
浏览器滚动事件:onscroll

定时器
setInterval 不止执行一次
setTimeOut 只会执行一次
clearInterval 清除定时器
var times=setInterval(function(){
//清除定时器操作
clearInterval(times);
},1000);

偏移量:
offsetWidth:偏移量宽
offsetHeight 偏移量高
offsetLeft 往左偏移

children 标签下面的子元素 div.children[2] 找到div元素下面的第三个子元素

cloneNode(true) 复制该标签,加了true后,代表复制标签下面的
所有元素,包括内容
insertBefore(要插入的内容,要插入的位置)
将复制好的节点标签插入到哪个元素里面

innerHTML 往元素里面添加内容
createElement 创建元素
appendChlid 将创建好的内容追加

字符串string类别下的方法:
charAt(index) 返回字符串中index(索引)位置上的字符
substr(2); // 从位置2的字符开始 截取到最后
substr(2,6) 从位置2开始截取,截取6个
substring(2); // 从位置2的字符开始 截取到最后
substring(2, 6); // 从位置2的字符开始一直到位置为6的字符
位置为止 ,但不包含6位置
replace("sb", "*"); 替换,第一个参数代表要替换的内容,
第二个参数代表替换成的内容
indexOf("l") 从前面开始所要寻找的字符串的位置
lastIndexof 从后面开始寻找所要找寻的字符串的位置

Math方法:
随机数:Math.random()*7; 从0到7的数字随机
小数变整数:Math.round
向上取整:Math.ceil()
向下取整:Math.floor()
绝对值:abs()
最大值:max()
最小值:min()

日期对象:
var date=new Date();
getFullYear() 获取全年
getMonth()+1 获取月份,因为月份从0月开始算,需要后面+1
getDate() 获取日期
getHours(); // 时
getMinutes(); // 分
getSeconds() //秒
getLocalString 获取本地的日期字符串

正则表达式:new regExp
元字符:
d 0-9的任意一个数字
D 非0-9的数字
w 字母数字下划线
W 非字母数字下划线
s 匹配空白字符包括tab键
 匹配边界符
换行
. 除 以外的任意字符
^ 以什么开头
$ 以什么结尾
转义字符
| 或
[] 多种或
[^123] 除123以外的任何字符
[123] 1或者2或者3

  •  出现1次到多次
    

? 出现0次到1次

  •  出现0到多次
    

{m} 出现m次
{m,} 至少出现m次
{m,n} 出现m到n次

闭包只会进行值的链接引用,只会返回i最后值
闭包内存消耗大
一个对象是可拓展的,一定是非冻结的
For i in obj obj[i]属性值 i 属性 obj 对象

自身属性高于原型属性

原型链

constructor构造函数 方法
extends继承 关键字
super调用父类
构造函数浪费内存
共享方法 放到prototype原型对象上
__proto__对象原型
Constructor

字符串方法
Trim()去除两边空格

对象方法(特性)
defineProperty

函数指向
Call()改变this指向
apply数组形式传参 借助数学对象实现Max Min
bind不调用方法

数组遍历
forEach 普通遍历
Some 返回布尔值
filter 返回符合条件值

原始数据类型(基元类型)
String,Number,Boolean,undefined,null,symbol(es6符号)
引用类型
Object、Function、Array、RegExp所有引用类型都是对象
执行环境(也称作用域)变量或函数有权访问的其它数据,每个执行环境都有与之相关联的变量对象环境中定义的所有变量和函数都保存在这个对象中。虽然我们无法访问这个对象,但解析器在处理数据时会在后台使用它
执行环境有全局执行环境、函数执行环境和块级作用域(es6)
每次进入一个执行环境都会创建一个用于搜索变量和函数的作用域链
函数执行环境除了可以访问当前作用域的变量及函数外,还可以访问它的父级、全局等变量及函数(可以说当前函数执行环境之上的整个作用域链)
全局环境只能访问在全局定义的变量和函数

作者
我们定义的变量、函数、对象等都是存储在栈或堆中

现在大部分是这种
标记清除:存储在内存中的所有变量都加上标记,它会去掉环境中的变量以及被环境中的变量引用的变量标记。而在此之后再被加上标记的变量则被视为准备删除的变量
ie中bom和dom中的对象就是使用c++以com(组件对象模型)对象的形式实现的
引用计数:原理是跟踪记录每一个变量值的引用次数,当声明一个变量并将值赋给该变量时,则这个引用次数加1;相反,如果该变量的值又取得了另一个值(重新赋值),则减1,为0清除,循环引用同一个对象时,该值的引用次数不会为0就会导致严重的性能问题
ie性能问题

ie垃圾收集器是一个脚本中包含的变量超过默认的临界点时,会被触发垃圾回收机制。但当包含的变量足够多时,远远超过临界点时,则垃圾回收机制会循环调用,这样会导致性能问题。为了解决这个问题,在ie7发布的新版本中改变了这种方式,我的理解是这样的,在垃圾回收机制回收了较少的内存空间时,则这个临界点会加倍,如果回收后小于原先默认的临界点时,则将设为默认临界点
临界点可以理解为根据内存分配的空间,具体一点就是256个变量、4096个对象(或数组)字面量和数组元素或64kb的字符串。

管理内存

一旦数据不再使用,最好通过将其值设置为null来释放引用---这个做法叫做解除引用。这一做法适用于大多数全局变量和全局对象的属性。局部变量会在它们离开执行环境时自动解除引用
解除一个值的引用并不意味着自动回收该值所占用的内存,而是让值脱离执行环境,在下次垃圾收集器运行时将其回收

类型判断
typeof 判断是new 还是 数据直接量 原理:JavaScript String 通过 new创建和直接赋值字符串的区别
instanceof 运算符用来测试一个对象在其原型链中是否存在一个构造函数的 prototype 属性。
Object.prototype.toString.call 最准确的一个
RegExp

var expression = / pattern / flags;
pattern 可以是任何简单或复杂的正则表达式,可以包含字符类、限定符、分组、向前查找以及反向应用
flags 标明正则表达式的行为。正则表达式的匹配模式支持下列3个标标志:
双重转义所有的元字符必须双重转义,例如 在对象字面量中通常转义为 ,而在正则表达式字符串中变成\n。

global: 布尔值,表示是否设置了g标志

ignoreCase: 布尔值,表示是否设置了i标志

lastIndex: 整数,表示开始搜索下一个匹配项的字符串位置,从0开始

multiline:布尔值,表示是否设置了m标志

source: 返回按字面量表示法表示的模式字符串

方法
RegExpObject.exec(string)方法用于检索字符串中的正则表达式的匹配返回值

如果匹配成功,exec() 方法返回一个数组,并更新正则表达式对象的属性。返回的数组将完全匹配成功的文本作为第一项,将正则括号里匹配成功的作为数组填充到后面。

2018引入具名组匹配Named Capture Groups
常量 名组 表达式
const RE_DATE = /(?d{4})-(?d{2})-(?d{2})/;

test()
test() 方法执行一个检索,用来查看正则表达式与指定的字符串是否匹配。返回 true 或 false。 语法 RegExpObject.test(string)参数 返回true或者false
RegExp 构造函数属性
函数
函数声明
函数表达式
Function 构造函数 不推荐:使用构造函数定义是不推荐的。因为这种语法会导致解析两次代码(第一次解析常规ECMAScript代码, 第二次是解析传入构造函数中的字符串),从而影响性能

没有重载 两个同名函数会覆盖
作为值的函数 函数名本身就是变量 可以传参,也可以返回
函数自调用
函数内部属性
arguments
callee
this
this 引用的是函数执行的环境对象。但有些特殊的例外,如settimeout,setInterval等
caller

caller保存着调用当前函数的函数引用,如果是在全局作用域下调用,则返回null。如
松耦合
当函数在严格模式下运行时,访问arguments.callee会导致错误。
函数的属性和方法length length属性表示函数希望接收的命名参数的个数 prototype prototype 指向原型对象。包括诸如:toString()、valueof()
方法
以下的方法都是改变函数的this指向的call()
call()
方法调用一个函数, 其具有一个指定的this值和分别地提供的参数(参数的列表)
fun.call(thisArg, arg1, arg2, ...)thisArg 在fun函数运行时指定的this值arg1, arg2, ... 指定的参数列表。
返回值 返回值是你调用的方法的返回值,若该方法没有返回值,则返回undefined。
apply()
方法调用一个函数, 其具有一个指定的this值,以及作为一个数组(或类似数组的对象)提供的参数。
fun.call(thisArg, [argsArray])
thisArg 在fun函数运行时指定的this值。
argsArray 可选的。一个数组或者类数组对象,其中的数组元素将作为单独的参数传给 func 函数。
返回值 调用有指定this值和参数的函数的结果。
bind()
bind()方法创建一个新的函数, 当被调用时,将其this关键字设置为提供的值,在调用新函数时,在任何提供之前提供一个给定的参数序列。
理解创造
fun.bind(thisArg[, arg1[, arg2[, ...]]])
thisArg 当绑定函数被调用时,该参数会作为原函数运行时的 this 指向。当使用new 操作符调用绑定函数时,该参数无效。
arg1, arg2, ... 当绑定函数被调用时,这些参数将置于实参之前传递给被绑定的方法返回值 返回由指定的this值和初始化参数改造的原函数拷贝
写一个静态页面上GitHub
引用类型与基本包装类型的区别
使用new 操作符创建的引用类型的实例,在执行流离开当前作用域之前都一直保存在内存中
自动创建的基本包装类型的对象,则只存在于一行代码的执行瞬间,然后立即被销毁
自动创建的基本包装类型的对象在运行时不能添加属性或方法
Object构造函数会根据传入值类型返回相应的基本包装类型的实例
注意:使用new 调用基本包装类型的构造函数,与直接调用同名的转型函数时不一样的
接码平台
单体内置对象
Global 和 Math
浏览器里面,顶层对象是window,但 Node 和 Web Worker 没有window。
浏览器和 Web Worker 里面,self也指向顶层对象,但是 Node 没有self。
Node 里面,顶层对象是global,但其他环境都不支持。

Global对象的方法
URI编码方法

encodeURI() 整个uri进行编码,但不会对本身属于uri的特殊字符进行编码
encodeURIComponent() 对uri中的某一段进行编码,会对任何非标准字符进行编码
decodeURI() 对encodeURI()替换的字符进行解码
decodeURIComponent() 对 encodeURIComponent()进行解码

eval()方法
eval()是一个完整的ECMAScript的解释器,只接收一个可执行的字符串
Global对象的属性

undefined
NaN
Infinity
Object
Array
Function
Boolean
String
Number
Date
RegExp
Error 当代码运行时的发生错误,会创建新的Error对象,并将其抛出。
EvalError 代表了一个关于 eval 函数的错误.此异常不再会被JavaScript抛出,但是EvalError对象仍然保持兼容性.
RangeError 标明一个错误,当一个值不在其所允许的范围或者集合中。
ReferenceError (引用错误) 表明一个不存在的变量被引用。
SyntaxError 表尝试解析语法上不合法的代码的错误。
TypeError(类型错误) 用来表示值的类型非预期类型时发生的错误。
URIError 用来表示以一种错误的方式使用全局URI处理函数而产生的错误。
InternalError 非标准该特性是非标准的,请尽量不要在生产环境中使用它!表示出现在JavaScript引擎内部的错误。 例如: "InternalError: too much recursion"(内部错误:递归过深)。

Math对象
Math 是一个内置对象, 它具有数学常数和函数的属性和方法。不是一个函数对象。与其它全局对象不同的是, Math 不是一个构造器. Math 的所有属性和方法都是静态的.
属性

Math.E 欧拉常数,也是自然对数的底数, 约等于 2.718.
Math.LN2 2的自然对数, 约等于0.693.
Math.LN10 10的自然对数, 约等于 2.303.
Math.LOG2E 以2为底E的对数, 约等于 1.443.
Math.LOG10E 以10为底E的对数, 约等于 0.434.
Math.PI 圆周率,一个圆的周长和直径之比,约等于 3.14159.
Math.SQRT1_2 1/2的平方根, 约等于 0.707.
Math.SQRT2 2的平方根,约等于 1.414.

方法
注意三角函数(sin(), cos(), tan(),asin(), acos(), atan(), atan2())是以弧度返回值的。可以通过除法(Math.PI / 180)把弧度转换为角度,也可以通过其他方法来转换。
注意很多数学函数都有一个精度,并且精度在不同环境下也是不相同的。这就意味着不同的浏览器会给出不同的结果,甚至相同的 JS 引擎在不同的OS或者架构下也会给出不同的结果。

Math.abs(x) 返回x的绝对值.
Math.acos(x) 返回x的反余弦值.
Math.acosh(x) 返回x的反双曲余弦值.
Math.asin(x) 返回x的反正弦值.
Math.asinh(x) 返回x的反双曲正弦值.
Math.atan(x) 以介于 -PI/2 与 PI/2 弧度之间的数值来返回 x 的反正切值.
Math.atanh(x) 返回 x 的反双曲正切值.
Math.atan2(y, x) 返回 y/x 的反正切值.
Math.cbrt(x) 返回x的立方根.
Math.ceil(x) 返回x向上取整后的值.
Math.clz32(x) 返回一个32位整数的前导零的数量。
Math.cos(x) 返回x的余弦值.
Math.cosh(x) 返回x的双曲余弦值.
Math.exp(x) 返回 Ex, 当x为参数, E 是欧拉常数 (2.718...), 自然对数的底.
Math.expm1(x) 返回 exp(x)-1 的值.
Math.floor(x) 返回小于x的最大整数。
Math.fround(x) 返回数字的最接近的单精度浮点型表示。
Math.hypot([x[,y[,…]]]) 返回其参数平方和的平方根。
Math.imul(x) 返回32位整数乘法的结果。
Math.log(x) 返回一个数的自然对数(loge, 即ln)。
Math.log1p(x) 返回 1 加上一个数字的的自然对数(loge, 即ln)。
Math.log10(x) 返回以10为底数的x的对数。
Math.log2(x) 返回以2为底数的x的对数。
Math.max([x[,y[,…]]]) 返回0个到多个数值中最大值.
Math.min([x[,y[,…]]]) 返回0个到多个数值中最小值.
Math.pow(x,y) 返回x的y次幂.
Math.random() 返回0到1之间的伪随机数.
Math.round(x) 返回四舍五入后的整数.
Math.sign(x) 返回x的符号函数, 判定x是正数,负数还是0.
Math.sin(x) 返回正弦值.
Math.sinh(x) 返回x的双曲正弦值.
Math.sqrt(x) 返回x的平方根.
Math.tan(x) 返回x的正切值.
Math.tanh(x) 返回x的双曲正切值.
Math.trunc(x) 返回x的整数部分,去除小数.

原文地址:https://www.cnblogs.com/zong-zong/p/13553272.html