1:浏览器是有缓存的,开发中可以通过快捷键绕过缓存

  对于Windows驱动的系统:Ctrl + F5

  对于Mac驱动的系统:Command + Shift + R.

2:精度问题 (符点和大数字可能会导致精度出现问题)

  0.1 + 0.2 == 0.3;    // false  判断符点的==时需注意

99999999999999999 === 100000000000000000    // true   大整数丢失精度

12.235.toFixed(2)   // 12.23 难道是我概念理解错了?

3:Promise (Promise是个承诺.  new Promise(function(resolve, reject){})  一言即出,四马难追.)

4:闭包函数. (函数创建的时候,scope就确定了)

    var a = 0;

    function addCount() {

    a++;

  }

   // 修改下使之成为一个闭包

   function addCount() {

    var a = 0;

        return function() {

    a++;

   }  

  }

5: 箭头函数. (箭头函数对懒人来说很有用,看上去清晰多了 )

const add = x => y => x + y;

add(10)(1);

6: 判断相等.  (判断是值的判断,对像和对像判断是判断地址,对象和原始数据判断是,是先把对象转化原始数据)

console.log(null == 0);              // false

console.log(Boolean("0"));        // true

console.log([] == 0);                 // true.  对象与基本数据判断的时候,对象会先转化为基本数据

console.log({valueOf:()=>5} == 5);   // ture

console.log(Boolan([]));            // true;

7:let 与 var的区别

//------ 全局变量a由var命令声明,所以它是顶层对象的属性;全局变量b由let命令声明,所以它不是顶层对象的属性
var a = 1;
console.log(window.a); // 1
let b = 1;
console.log(window.b); // undefined // ------let 自带作用域--------------------------------------------------------------------------
let name1 = "hong";
(function(){
let name1 = "honghong"
})();
console.log(name1); // honghong var name = "hong";
(function() {
name = "honghong";
})();
console.log(name); // honghong //---------------------------------------------------------与闭包相关----------------------------
// 用let实现闭包
var array = [];
for (let i = 0; i < 5; i++) {
array.push(function(){
console.log("i:", i)
});
}
array[2](); // 输出2 // 用var
array = [];
for (var j = 0; j < 5; j++) {
array.push(function(){
console.log("i:", j);
});
}
array[2](); // 输出5 // 用闭包实现
array = [];
for (var j = 0; j < 5; j++) {
array.push((function(index){
     return function() {
console.log("i", index);
}
})(j));
}
console.log(array[2]()); // 输出2

8:二进制 ArrayBuffer, TypedBuffer,  DataView

ArrayBuffer代表储存二进制数据的一段内存.不能直接用来读写。只能被TypeArray或DataView"包装"后,方才能读写

TypedBuffer用来读写简单的二进制数据(参数 arraybuffer, 起始位置,  长度 | 普通数组 | count )

DataView用来读写复杂的二进制数据(参数 arraybuffer, 起始位置,count )

const buffer = new ArrayBuffer(24);

const uint32Array = new Uint32Array(buffer, 0, 1);

const uint3Array = new Uint8Array(buffer, 4, 16);

const float32Array = new Float32Array(buffer, 20, 1);

上面代码将一个 24 字节长度的ArrayBuffer对象,分成三个部分:

  • 字节 0 到字节 3:1 个 32 位无符号整数
  • 字节 4 到字节 19:16 个 8 位整数
  • 字节 20 到字节 23:1 个 32 位浮点数

9:async返回一个Promise. async函数内部return语句返回的值会成为then方法回调函数的参数

async function f() {
return 'hello world';
}
f().then(v => console.log(v))

10:正则表达式

(x)     匹配 'x' 并且记住匹配项        例   'bar foo'.replace( /(bar) (foo)/, '$2 $1');    // foo bar

(?:x)   匹配 'x' 并且不记住匹配项

x(?=y) 匹配 'x'并且后面跟着y

x(!=y) 匹配 'x'并且后面不跟着y

\b      匹配一个词的边界

11:webgl用的是右手坐标系

12:symbol 是原始数据,可表示唯一的值. Symbol("bar) == Symbol("bar") // false    Symbol.from("bar") == Symbol.from("bar") // true

13:Iterator 接口的目的,就是为所有数据结构,提供了一种统一的访问机制

14:VO|AO (听起来很高大上,理解下,装装逼)

EC的建立分两阶段

    进入上下文阶段:发生在函数调用时,但是在执行具体代码之前(比如,对函数参数进行具体化之前)

执行代码阶段:变量赋值,函数引用,执行其他代码。

AO示例:

function test(a, b) {
var c = 10;
function d() {}
var e = function _e() {};
(function x() {});
} test(10); // call
当进入test(10)的执行上下文时,它的AO为: testEC={
AO:{
arguments:{
callee:test
length:1,
0:10
},
a:10,
c:undefined,
d:<reference to FunctionDeclaration "d">,
e:undefined
}
};
由此可见,在建立阶段,VO除了arguments,函数的声明,以及参数被赋予了具体的属性值,其它的变量属性默认的都是undefined。函数表达式不会对VO造成影响,因此,(function x() {})并不会存在于VO中。 当执行test(10)时,它的AO为: testEC={
AO:{
arguments:{
callee:test,
length:1,
0:10
},
a:10,
c:10,
d:<reference to FunctionDeclaration "d">,
e:<reference to FunctionDeclaration "e">
}
};
可见,只有在这个阶段,变量属性才会被赋具体的值。

15:知识概念 举例说明

// 填充VO的顺序是: 函数的形参 -> 函数申明 -> 变量申明。当变量申明遇到VO中已经有同名的时候,不会影响已经存在的属性
function a(x) {
return x * 2;
}
var a;
console.log(a);
// 活动对象是在进入函数上下文时刻被创建的,它通过函数的arguments属性初始化
function b(x, y, a) {
arguments[2] = 10;
console.log(a);
}
b(1, 2); // __proto__ 指向原型对象
function A(){};
A.prototype.getName = function(){return console.log("honghong")};
var a = new A();
a.getName(); // honghong
a.__proto__ = null;
console.log(a instanceof A); // 检查a是否是A的原型 false
a.getName(); // 指向的原型为空,所以报错 // 构造函数动态传参
function People(a, b, c) {
  this.a = a;
  this.b = b;
  this.c = c;
}
People.prototype.say = function() {
  console.log("say hello");
}
var obj = {};
People.apply(obj, [1,2,3]);
obj.__proto__ = People.prototype;
console.log(obj.a,obj.b,obj.c);
console.log(obj.say);

16:防盗链的实现可以通过设置HTTP Header中的Referer实现

base标签很有用,可以本地看线上的一些效果

xml一般只在浏览器会有支持,像nodejs,小游戏等不支持xml,这时就需要把xml转化成json,或使用 window.DOMParser = require("./xmldom/xmldom.js").DOMParser

17:es6写法

var obj1 = {}, var obj2 = {...obj1}, 浅复制的另一种写法

javascript 常用知识点的更多相关文章

  1. javaScript常用知识点有哪些

    javaScript常用知识点有哪些 一.总结 一句话总结:int = ~~myVar, // to integer | 是二进制或, x|0 永远等于x:^为异或,同0异1,所以 x^0 还是永远等 ...

  2. JavaScript常用知识点整理——思维导图

    如图 思维导图图片链接 http://www.edrawsoft.cn/viewer/public/s/b8327462051289 有道云笔记图片链接 http://note.youdao.com/ ...

  3. Javascript重要知识点梳理

    Javascript重要知识点梳理 一.Javascript流程控制 js中常用的数据类型 var关键字的使用 if – else if – else switch while for 二.Javas ...

  4. javascript常用知识点集

    javascript常用知识点集 目录结构 一.jquery源码中常见知识点 二.javascript中原型链常见的知识点 三.常用的方法集知识点 一.jquery源码中常见的知识点 1.string ...

  5. Javascript常用的设计模式详解

    Javascript常用的设计模式详解 阅读目录 一:理解工厂模式 二:理解单体模式 三:理解模块模式 四:理解代理模式 五:理解职责链模式 六:命令模式的理解: 七:模板方法模式 八:理解javas ...

  6. JavaScript基本知识点——带你逐步解开JS的神秘面纱

    JavaScript基本知识点--带你逐步解开JS的神秘面纱 在我们前面的文章中已经深入学了HTML和CSS,在网页设计中我们已经有能力完成一个美观的网页框架 但仅仅是网页框架不足以展现出网页的魅力, ...

  7. JavaScript 常用功能总结

    小编吐血整理加上翻译,太辛苦了~求赞! 本文主要总结了JavaScript 常用功能总结,如一些常用的JS 对象,基本数据结构,功能函数等,还有一些常用的设计模式. 目录: 众所周知,JavaScri ...

  8. select元素javascript常用操作 转

    /*------------------------------------------------------ *作者:xieyu @ 2007-08-14 *语言:JavaScript *说明:s ...

  9. DB2_SQL_常用知识点&实践

    DB2_SQL_常用知识点&实践 一.删除表中的数据(delete或truncate) 1 truncate table T_USER immediate; 说明:Truncate是一个能够快 ...

随机推荐

  1. NIH周三讲座视频爬虫

    最近网是越来越差了,在线播放基本是没戏了,所以就动了爬虫下载的念头. NIH把视频片段存放,一般都是8秒一段,大概看下视频长度估算一下片段个数就差不多了. 新建一个NIH的文件夹,然后把爬虫下来的.t ...

  2. 基于FPGA的DDS设计(二)

    在DDS设计中,如果相位累加器每个时钟周期累加1,就会输出频率为195.313KHz的波形.如果每个时钟周期累加2,就会输出频率为2*195.313KHz的波形·······,如果每两个时钟周期累加1 ...

  3. 有限差分法解矩形波导内场值、截止频率 MATLAB

    利用有限差分法,解矩形波导内场解和截止频率: 这里以解TM11模为例,利用双重迭代法,每4次场值,更新一次Kc: %% % 求矩形波导中TM11模 截面内场分布.截止频率kc和特性阻抗Zc % // ...

  4. Shell 变量简介

    1. 概述 概述 知识点又稀又碎, 面试一问就流泪 简单介绍下 shell 下的变量及其基本操作 2. 环境 操作系统 CentOS Linux release 7.5 用户 root 用户 约定 使 ...

  5. 20155215宣言 实验三 敏捷开发与XP实践 实验报告

    实验内容 XP基础 XP核心实践 相关工具 实验要求 1.没有Linux基础的同学建议先学习<Linux基础入门(新版)><Vim编辑器> 课程 2.完成实验.撰写实验报告,实 ...

  6. vim 中文乱码问题

    编辑~/.vimrc文件,加上如下几行: set fileencodings=utf-8,ucs-bom,gb18030,gbk,gb2312,cp936   set termencoding=utf ...

  7. stardict词库

    http://download.huzheng.org/zh_CN/ sudo tar -jxvf *   -C /usr/share/stardict/dic

  8. STM32L431仿真卡在HAL_InitTick(TICK_INT_PRIORITY);

    1. 使用IAR 8.20版本,STM32L431RBT芯片,JLINK V9仿真器,实际仿真测试的时候卡在如下的函数 /* Use SysTick as time base source and c ...

  9. BZOJ3174. [TJOI2013]拯救小矮人(dp)

    题目链接 https://www.lydsy.com/JudgeOnline/problem.php?id=3174 题解 其实此题并不需要那么多YY的部分. 我们考虑若干个小矮人逃出的顺序.若跳出的 ...

  10. 【JUC源码解析】PriorityBlockingQueue

    简介 基于数据结构堆实现的线程安全的无界队列,这个堆的内存结构是数组,结合了数组和二叉树的特点. 堆 以下内容参考<编程珠玑>和<算法导论>有关堆的章节. 数据结构 堆是用来表 ...