最近在看廖雪峰的js教程,重温了下js基础,记下一些笔记,好记性不如烂笔头嘛javascript
use strict
JavaScript
引擎是一个事件驱动的执行引擎,代码老是以单线程执行NaN
, Infinity
都是number
类型 NaN
表示不是一个数字,Infinity
表示无穷大,NaN和其余任何数字都不相等Null
表示空值 ,undefined
表示未定义var
java
es6
中表示多行字符串能够用```,在此以前都是用
\n`30
和字符串"30"
是两个不一样的元素undefined
in
判断对象是否具备某属性,属性可能为对象自有属性也可能为继承属性,若是查看是否为对象的自有属性,用hasOwnProperty
null
,undefined
,0
,NaN
,""
视为false
,其余的都为true
for
,for in
,while
,do while
,es6
引入新的循环for of
,forEach
循环es6
的Map
,Set
,iterable
元素Array
,Map
,Set
都是属于iterable
类型,均可以用for of
进行循环iterable
内置forEach
循环return
的函数返回undefined
arguments
,只在函数内部起做用,而且永远指向当前函数的调用者传入的全部参数,arguments
相似Array
但它不是一个Array
,调用时即便不传递参数也能够经过arguments
获取到全部参数es6
的新参数rest
来代替多个参数window
,全部的全局变量(包含函数)都会绑定为全局对象window
的一个属性ReferenceError
错误名字空间
全局变量会绑定到window
上,不一样的JavaScript
文件若是使用了相同的全局变量,或者定义了相同名字的顶层函数,都会形成命名冲突,而且很难被发现,减小冲突的一个方法是把本身的全部变量和函数所有绑定到一个全局变量中,许多著名的JavaScript
库都是这么干的:jQuery
,YUI
,underscore
等等es6
的快级做用域元素let
,const
,let
用于定义块级变量,const
用于定义常量,常量建议所有大写字母表示解构赋值
,能够快速的把数组、对象的属性赋值给变量this
是一个特殊变量,它始终指向当前对象this
调用,若是以对象的方法形式调用,好比xiaoming.age()
,该函数的this
指向被调用的对象,也就是xiaoming
,若是单独调用函数,好比getAge()
,此时,该函数的this
指向全局对象,也就是window
ECMA
决定,在strict
模式下让函数的this
指向undefined
apply
,call
方法,apply装饰器高阶函数的概念
,参数的为函数的函数为高阶函数array
的map
,reduce
用法,调用map
的回调函数和实际的函数参数可能不同致使异常的结果 array.prototype.map map
的回调有4个参数,而若是如array.map(parseInt),parseInt只有2个参数,并且第二个参数和calltable第二个参数性质不同,形成结果异常,示例请看廖雪峰的js小示例array
的filter
用法,用于对数组值的过滤array
的sort
排序函数,默认的是经过字符串的ascii
码进行排序,固然,sort
也是个高阶函数,你能够自定义排序算法错误传播
若是在一个函数内部发生了错误,它自身没有捕获,错误就会被抛到外层调用函数,若是外层函数也没有捕获,该错误会一直沿着函数调用链向上抛出,直到被JavaScript引擎捕获,代码终止执行es6
的箭头函数(也属于匿名函数)·
开始,表面参数的个数不限制 function (x,y,...rest) rest
表示可选参数typeof
检测类型,[],null,{}
返回的都是object
,undefined
返回的是undefined
typeof 123; // 'number' typeof NaN; // 'number' typeof 'str'; // 'string' typeof true; // 'boolean' typeof undefined; // 'undefined' typeof Math.abs; // 'function' typeof null; // 'object' typeof []; // 'object' typeof {}; // 'object'
123..toString(); // '123', 注意是两个点! (123).toString(); // '123'
node
查找模块的顺序依次为内置模块
,全局模块
,当前模块
node.js
加载模块时使用了匿名函数加载模块的方式来规避各个模块内变量冲突的问题if (typeof(window) === 'undefined') { console.log('node.js'); } else { console.log('browser'); }
Date
相关var now = new Date(); now; // Wed Jun 24 2015 19:49:22 GMT+0800 (CST) now.getFullYear(); // 2015, 年份 now.getMonth(); // 5, 月份,注意月份范围是0~11,5表示六月 now.getDate(); // 24, 表示24号 now.getDay(); // 3, 表示星期三 now.getHours(); // 19, 24小时制 now.getMinutes(); // 49, 分钟 now.getSeconds(); // 22, 秒 now.getMilliseconds(); // 875, 毫秒数 now.getTime(); // 1435146562875, 以number形式表示的时间戳
json
其实是js
的一个子集json
的数据类型和js
的数据类型一致node
的同步异步的关系nodejs
底层采用C/C++
编写,而后对外暴露为javascript
接口CS
,BS
的由来MVVM
的原理,双向绑定,model-dom
对应https
的原理es6
的生成器generator
js
原型继承object.create
,__proto__
obj.xxx
访问一个对象的属性时,JavaScript
引擎先在当前对象上查找该属性,若是没有找到,就到其原型对象上找,若是尚未找到,就一直上溯到Object.prototype
对象,最后,若是尚未找到,就只能返回undefined
new functionname
,经过new
方法来建立对象window
对象有innerWidth
和innerHeight
属性,能够获取浏览器窗口的内部宽度和高度。内部宽高是指除去菜单栏、工具栏、边框等占位元素后,用于显示网页的净宽高。window
对应的,还有一个outerWidth
和outerHeight
属性,能够获取浏览器窗口的整个宽高navigator
对象表示浏览器的信息screen
对象表示屏幕的信息location
对象表示当前页面的URL信息document
对象表示当前页面。因为HTML
在浏览器中以DOM
形式表示为树形结构,document
对象就是整个DOM
树的根节点history
对象保存了浏览器的历史记录css
的属性在js
中换成驼峰写法,如font-size
写成fontSize
,p.style.fontSize = '20px'
JavaScript
代码都不可能同时有多于1个线程在执行js
,css
默承认以跨域,其余请求跨域须要通过处理es6
的 promise
,canvas
用法