主要还是各地搜刮来的,本人对于这方面的总结还是8彳亍,给各位大佬磕头了砰砰砰

1.

2.JS闭包和匿名对象以及作用域

js在执行之前,会将所有带var和function的进行提前定义和声明。(带var的提前声明,function声明和定义都完成了)
首先,在全局作用域下,进行预解释:
test=xxxfff000(开辟一个堆内存,里面存的是代码字符串)
var result(声明一个变量result)
var  result2(声明一个变量result2)
-------------------------------
代码执行:
result=test()  -->将test执行的返回结果赋值给result,是一个对象,再开辟一个堆内存,test执行,形成一个私有作用域A
再进行预解释和代码执行等一系列操作
result2=test()  同理
result.add()  -->方法执行形成一个私有作用域
n++  顺着作用域链向上寻找到test作用域A(A这个作用域不销毁,因为被全局变量result占用了)中的n为4399,n++ 》4400
(这时test这个作用域A下的n变成4400)
(1)   console.log(n)  //4400   
==============================
result.add()   -->方法执行形成一个新的私有作用域
n++  顺着作用域链向上寻找到test作用域(A)中的n为4400,n++ =》4401
(2)   console.log(n)  //4401  
===============================
(3)   console.log(result.n)  //4399
此时找的只是result对应的那个堆内存中的n
===============================
result2.add()  -->方法执行形成一个私有作用域
n++ 顺着作用域链向上寻找到test作用域(B)中的n为4399,n++ =》4400
(3)   console.log(n)  //4400 

3.

函数声明

function sum(a,b){
return a+b
}

函数表达式

var sum = function(a,b){
return a+b
}
Function构造函数【从技术角度讲,这是一个函数表达式】
var sum = new Function('a','b','return a+b')//不推荐使用,影响函数解析性能

4.

JavaScript有3大对象,分别是本地对象内置对象宿主对象

  • 本地对象

    • 与宿主无关,独立于宿主环境的ECMAScript实现提供的对象。
    • 简单来说,本地对象就是 ECMA-262 定义的类(引用类型)。
    • 这些引用类型在运行过程中需要通过new来创建所需的实例对象。
    • 包含:ObjectArrayDateRegExpFunctionBooleanNumberString等。
  • 内置对象

    • 与宿主无关,独立于宿主环境的ECMAScript实现提供的对象。
    • 在 ECMAScript 程序开始执行前就存在,本身就是实例化内置对象,开发者无需再去实例化。
    • 内置对象是本地对象的子集。
    • 包含:GlobalMath
    • ECMAScript5中增添了JSON这个存在于全局的内置对象。
  • 宿主对象

    • 由 ECMAScript 实现的宿主环境提供的对象,包含两大类,一个是宿主提供,一个是自定义类对象。
    • 所有非本地对象都属于宿主对象。
    • 对于嵌入到网页中的JS来说,其宿主对象就是浏览器提供的对象,浏览器对象有很多,如WindowDocument等。
    • 所有的DOMBOM对象都属于宿主对象。
5.JS的全局函数

6.

“==”运算符(两个操作数的类型不相同时)

  • 如果一个值是null,另一个值是undefined,则它们相等
  • 如果一个值是数字,另一个值是字符串,先将字符串转换为数字,然后使用转换后的值进行比较。
  • 如果其中一个值是true,则将其转换为1再进行比较。如果其中的一个值是false,则将其转换为0再进行比较。
  • 如果一个值是对象,另一个值是数字或字符串,则将对象转换为原始值,再进行比较。

对象到数字的转换

  • 如果对象具有valueOf()方法,后者返回一个原始值,则JavaScript将这个原始值转换为数字(如果需要的话)并返回一个数字。
  • 否则,如果对象具有toString()方法,后者返回一个原始值,则JavaScript将其转换并返回。(对象的toString()方法返回一个字符串直接量(作者所说的原始值),JavaScript将这个字符串转换为数字类型,并返回这个数字)。
  • 否则,JavaScript抛出一个类型错误异常。

空数组转换为数字0

  • 数组继承了默认的valueOf()方法,这个方法返回一个对象而不是一个原始值,因此,数组到数学的转换则调用toString()方法。空数组转换为空字符串,空字符串转换为数字0.

7.

在函数中,可以通过该引用更改传递对象的内容,但是你不能修改调用者具有的引用,因为你的引用只是一个副本:

var foo = {'bar': 1};

function tryToMungeReference(obj) {
obj = {'bar': 2}; // won't change caller's object
} function mungeContents(obj) {
obj.bar = 2; // changes _contents_ of caller's object
} tryToMungeReference(foo);
foo.bar === 1; // true - foo still references original object mungeContents(foo);
foo.bar === 2; // true - object referenced by foo has been modified

8.

javascript中实现跨域的方式总结

  • 第一种方式:jsonp请求;jsonp的原理是利用<script>标签的跨域特性,可以不受限制地从其他域中加载资源,类似的标签还有<img>.
  • 第二种方式:document.domain;这种方式用在主域名相同子域名不同的跨域访问中
  • 第三种方式:window.name;window的name属性有个特征:在一个窗口(window)的生命周期内,窗口载入的所有的页面都是共享一个window.name的,每个页面对window.name都有读写的权限,window.name是持久存在一个窗口载入过的所有页面中的,并不会因新页面的载入而进行重置。
  • 第四种方式:window.postMessage;window.postMessages是html5中实现跨域访问的一种新方式,可以使用它来向其它的window对象发送消息,无论这个window对象是属于同源或不同源。
  • 第五种方式:CORS;CORS背后的基本思想,就是使用自定义的HTTP头部让浏览器与服务器进行沟通,从而决定请求或响应是应该成功还是应该失败。
  • 第六种方式:Web Sockets;web sockets原理:在JS创建了web socket之后,会有一个HTTP请求发送到浏览器以发起连接。取得服务器响应后,建立的连接会使用HTTP升级从HTTP协议交换为web sockt协议。

9.

typeof Symbol()    //"symbol"
typeof Number()    //"number"
typeof String()    //"string"
typeof Function()    //"function"
typeof Object()    //"object"
typeof Boolean()    //"boolean"
typeof null    //"object"
typeof undefined    //"undefined"

部分易错JS知识点整理(缓慢填坑)的更多相关文章

  1. JS知识点整理(二)

    前言 这是对平时的一些读书笔记和理解进行整理的第二部分,第一部分请前往:JS知识点整理(一).本文包含一些易混淆.遗漏的知识点,也会配上一些例子,也许不是很完整,也许还会有点杂,但也许会有你需要的,后 ...

  2. JS初学的一些易错的知识点

    1.  false ,0 , "" ,undefined , null  在Boolean 环境下当成 false: null  在数值环境下当成 0: undefined 在数值 ...

  3. JS知识点整理(一)

    前言 本文把平时的一些读书笔记和理解进行了整理归纳,包含一些易混淆.遗漏的知识点,也会配上一些例子,可能不是很完整,还会有点杂,但也许会有你需要的(目前先整理了一部分,笔记有点多,后续会持续更新). ...

  4. fabric.js 知识点整理

    fabric.js是一个很好用的 canvas 操作插件,下面整理了一些平时项目中用到的知识点: //1: 获得画布上的所有对象: var items = canvas.getObjects(); / ...

  5. java易错基础知识点

    一. Switch 1.其能接受的数据类型有四个,char , byte, short, int2.Default 可放在switch中的任何一个地方,但只有给定的条件匹配不到时,才会执行3.Case ...

  6. 易错java知识点总结(持续更新)

    1. 2.java转义字符的理解 参考知乎大神:http://www.zhihu.com/question/29232624 正向和逆向处理转义字符 正向:把两个字符 \ n 识别为一个转义字符 ne ...

  7. js 知识点整理

    1. indexOf 与String类似,Array也可以通过indexOf()来搜索一个指定的元素的位置: var arr = [10, 20, '30', 'xyz']; arr.indexOf( ...

  8. 【学习笔记】JS知识点整理

    1 原型/原型链 1-1 原型 定义:原型是function对象的一个属性,定义了构造函数制造出的对象的公共祖先.通过该构造函数产生的对象,可以继承该原型的属性和方法. 原型是一个对象. 可以利用原型 ...

  9. 容易遗忘的JS知识点整理

    1.hasOwnProperty相关 为了判断一个对象是否包含自定义属性而不是原型链上的属性,我们需要使用继承自 Object.prototype 的 hasOwnProperty方法.hasOwnP ...

随机推荐

  1. 注意了,Mybatis中条件判断时遇到的坑

    1.mapper中比较字符串时需要注意的问题如下: mybatis 映射文件中,if标签判断字符串相等,两种方式:因为mybatis映射文件,是使用的ognl表达式,所以在判断字符串isComplet ...

  2. 二维码生成工具类java版

    注意:这里我不提供所需jar包的路径,我会把所有引用的jar包显示出来,大家自行Google package com.net.util; import java.awt.BasicStroke; im ...

  3. vue开发环境配置跨域,一步到位

    本文要实现的是:使用vue-cli搭建的项目在开发时配置跨域,上线后不做任何任何修改,接口也可以访问,前端跨域解决方案 production:产品 生产环境 development:开发 开发环境 1 ...

  4. gulp做简单的js压缩

    安装工具 全局安装npm install --global gulp 项目的依赖安装npm install --save-dev gulp npm install --save-dev gulp-re ...

  5. JS基础_枚举对象中的属性

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...

  6. Django rest-framework框架-认证组件的简单实例

    第一版 : 自己写函数实现用户认证 #models from django.db import models #用户表 class UserInfo(models.Model): user_type_ ...

  7. 5. Java的注释,标识符、标识符的命名规范

      什么是标识符符? 凡是可以由自己命名的地方都称为修饰符. 例: 项目名 ,包名 ,类名 .方法名 2.   命名规范. ①    不可使用java关键字和保留字,但是可以包含关键字和保留字. ②  ...

  8. ES6入门六:class的基本语法、继承、私有与静态属性、修饰器

    基本语法 继承 私有属性与方法.静态属性与方法 修饰器(Decorator) 一.基本语法 class Grammar{ constructor(name,age){ //定义对象自身的方法和属性 t ...

  9. 使用百度echarts仿雪球分时图(四)

    这章节来收拾一下一些小BUG,顺便把各个小提示信息也补上,分时图也就完成了. 上章节末尾提到的一个bug,就是第一个grid跟第三个grid之间是断开的,折线并没有连在一起,所以先来收拾这个问题.没有 ...

  10. 转自:java 文件格式二进制头文件校验

    转自:https://blog.csdn.net/useprogram/article/details/90637401public class FileTypeUtil { private fina ...