主要用于笔记整理,如有错误欢迎纠正,会持续更新
-
JavaScript是一种直译式脚本语言,是一种动态类型、弱类型、基于原型的语言,内置支持类型。它的解释器被称为JavaScript引擎,为浏览器的一部分,广泛用于客户端的脚本语言,最早是在HTML网页上使用,用来给HTML网页增加动态功能。JavaScript兼容与ECMA标准,因此也称为ECMAScript
-
JS类别:undefined、null、Boolean、number、string | Symbol(创建后独一无二且不可变的数据类型)
-
Object是JavaScript中所有对象的父对象 数据封装类对象: Object \ Array \ Boolean \ Number \ String 其它对象:Function \ Arguments \ Math \ Date \ RegExp \ Error
-
JavaScript基本规范
- 不要在同一行声明多个变量
- 不要使用 === / !== 来比较 true、false或者数值 ????
- 使用对象字面量替代newArray这种形式
- 不要使用全局函数
- switch语句必须带有default分支
- 函数不应该有时候有返回值,有时候没有返回值
- for循环必须使用大括号
- if语句必须使用大括号
- for-in循环中的变量,应该使用var关键字明确限定作用域,从而避免作用域污染
- JavaScript原型链 每个对象都会在其内部初始化一个属性,就是prototype(原型),当我们访问一个对象的属性时,如果这个对象内部不存在这个属性,那么它就会去prototype里找这个属性,这个prototype又会有自己的prototype,于是就这样一直找下去,也就是我们平时所说的原型链的概念 关系: instance.constructor.prototype = instance.————proto__ 特点 JavaScript对象是通过引用来传递的,我们创建的每个新对象实体中并没有一份属于自己的原型副本。当我们修改原型时,与之相关的对象就会继承这一改变。 当我们需要一个属性时,JavaScript引擎会先看当前对象中是否有这个属性,如果没有的话,就会查找他的prototype对象是否有这个属性,如果地推下去,一直检索到Object内建对象。
function Func(){ Func.prototype.name = "sean"; Func.prototype.getInfo = function(){ return this.name; }}// 现在可以参考var person = Object.create(oldObject);var person = new Func();// 它拥有了Func的属性和方法console.log(person.getInfo())// "sean"console.log(Func.prototype);// Func{name:"sean",getInfo=function()}复制代码
-
JavaScript类型的值 栈:原始数据类型(undefined、null、Boolean、number、string) 堆:引用数据类型(对象、数组、函数) 两种类型的区别: 存储位置不同; 原始数据类型直接存储在栈中的简单数据段,占据空间小,大小固定,属于被频繁使用数据,所以放入栈中存储 引用数据类型存储在堆中的对象,占据空间大,大小不固定。如果存储在栈中,将会影响程序运行的性能 引用数据类型在栈中存储了指针,该指针指向对重该实体的起始地址。当解释器寻找引用值时,会首先检索其它栈中的地址,取得地址后从栈中获得实体。
-
this 总是指向函数的直接调用者(而非间接调用者) 如果有new 关键字,this指向new出来的那个对象 在事件中,this指向出发这个事件的对象,特殊的是IE中attachEvent中的this总是指向全局的对象window 接地气来说:this 谁吊我我就指谁,没人管就指window(注意严格模式) 修改this 可以通过call、apply、bind、箭头函数 面试的时候回迷惑this情况,要分析最后this在没执行钱的作用域到底在哪儿
-
null 表示一个对象”没有值”的值,也就是值为”空“ undefined 表示一个变量声明了没有初始化(赋值) undefined不是一个有效的JSON,而null是; undefined的类型typeof 是 undefined null 的类型 typeof 是object JavaScript将为负值的变量默认值设为undefined JavaScript从爱不会将变量设为null,它是用来让程序员表明某个var 声明的变量时没有值的 验证null 需要使用=== , ==无法分别null、undefined
-
不会去查找原型的函数 hasOwnProperty hasOwnProperty 返回一个布尔值,支出一个对象是否具有指定名称的属性,此方法无法检查改对象的原型链中是否具有该属性;该属性必须是对象本身的一个成员 object.hasOwnProperty(proName)
-
JSON 是一种轻量级的数据交换个事,它基于JavaScript的一个子集,数据格式简单,已于读写,占用宽带小
-
write只能重绘整个页面,innerHTML可以重绘页面的一部分
-
DOM操作 创建新节点 createDocumentFragment() 创建一个DOM片段 createElement() 创建一个具体的元素 createTextNode() 创建一个文本节点 添加、移除、替换、插入 appendChild()、removeChild()、replaceChild()、insertBefore() 在已有的子节点钱插入一个新的子节点 查找 getElementsByTagName() 通过标签名称 getElementsByName() 通过元素Name属性的值(IE容错能力较强,会得到一个数组,其中包括id等于name) getelementId() 通过元素ID,唯一性
-
那些操作会造成内存泄露 setTimeout的第一个参数使用字符串而非函数的话,会引发内存泄露 闭包、控制台日志、循环(在两个对象彼此引用且彼此保留时,就会产生一个循环)
-
强制类型转换:parseInt() parseFloat() Number()
-
隐士类型转换: == !!
-
== 和 === 不同: 前者会自动转换类型,后者不会
-
浏览器的同源策略:一段脚本(ajax)只读取来自于同一来源的窗口和文档的属性,这里的统一来源指主机名、协议和端口号的组合
JS中的隐士转换
- 对象和布尔值比较 对象和布尔值进行比较式,对象先转换为字符串,然后再转换为数字,布尔值直接转换为数字
[] == true; //false []转换为字符串'', 然后转换为数组0,true转换为数字1,所以为false复制代码
- 对象和字符串比较 对象和字符串进行比较时,对象转换为字符串,然后两者进行比较
[1,2,3] == '1,2,3' //true [1,2,3]转化为'1,2,3',然后和'1,2,3',所有结果是true 复制代码
- 对象和数字比较 对象和数字进行比较时,对象先转换为字符串,然后转换为数字,再和数字进行对比
[1] == 1; //true 对象先转换为字符串再转换为数字,二者再比较[1] => '1' => 1 所以结果为true 复制代码
-
字符串和数字比较 字符串和布尔值进行比较时,二者全部转换成数值再比较
'1' == true; //true
-
字符串和布尔值比较 字符串和布尔值进行比较时,二者全部转换成数值再比较
'1' == true // true
-
布尔值和数字比较 布尔值和数字进行比较时,布尔转换为数字,二者比较
true == 1 // true