JavaScript相关知识点记录

参考:廖雪峰 JavaScript 教程


看教程的时候在OneNote上记录的一些知识点,然后把这些知识点复制粘贴上来。

数据类型和变量

- 数据类型和变量
- Number
	○ 不区分整数和浮点数
	○ NaN: Not a Number
	○ Infinity
- 字符串
	○ `'"`
	○ 模版字符串:var message = `你好, ${name}, 你今年${age}岁了!`;
	○ s.length
	○ s.toUpperCase()   //全部变成大写
	○ s.toLowerCase()
	○ s.indexOf('world')
	○ s.substring(0,3);
	○ s.substring(7);   //7开始到结束
- 布尔值
	○ False
	○ True
	○ 逻辑运算符:&&、||、!
	○ 比较运算符:>、<、>=、<=、==(自动类型转换后比较)、===(不做类型转换,推荐使用)
	○ NaN===NaN;//false
	○ isNaN(NaN);//true
	○ null:空值,undefined:未定义
- 数组
	○ 可以包含任意数据类型
	○ -var arr=[1,2,3.13,'Hello',null,true];
	○ -new Array(1,2,3);    //[1,2,3]
	○ arr[0]
	○ arr.length
	○ arr.indexOf(3);
	○ arr.slice(0,3);
	○ arr.push('a','b');
	○ arr.pop();
	○ arr.unshift('a','b');
	○ arr.shift();
	○ arr.sort();
	○ arr.reverse();
	○ arr.splice(2,3,'Google','Facebook');		//从索引2开始删除3个元素然后再添加两个元素
	○ var added=arr.concat([1,2,3]);
	○ arr.join('-');		//将arr中的元素用指定的字符连接成字符串
	○ 多维数组,数组的元素也可以是数组
- 对象
	○ 由键值组成的无序集合
	○ -var person={name:'Bob',age:20,hasCar:tree};
	○ person.name
	○ person.hasOwnProperty('name');
- 变量
- map和set
	○ var m=new Map([['Micheal',95],['Bob',75],['Tracy',85]]);
	○ m.set('Adam',67);  //添加
	○ m.has('Adam');
	○ m.get('Adam');
	○ m.delete('Adam');
	○ var s1=new Set();
	○ s.add(4);
	○ s.delete(4);
- iterable
	○ Array、Map、Set都是iterable类型的
	○ 可以通过		for…of	循环来遍历
	○ for (var x of a){}
	○ for  .. of 和for … in 的区别:for …in实际遍历的是数组的属性
	○ forEachshow example,它接受一个函数,每次迭代自动回调该函数,对于Array接受的函数接受三个参数:element、index、array,对于Set,三个参数是element、element、set,对于Map,三个参数是value、key、map

函数

- 函数
- 两种定义方式
- arguments
- 全局作用域:window
- 用	let	声明一个块级作用域的变量,for(let i=0;i<10;i++){}
- 解构赋值:同时对一组变量进行赋值,(这样在交换两个变量时就不用临时变量了)
- var [x,y,z]=['hello','Javascript','ES6'];
- 对象内部定义某个属性为函数,此时也可以称为方法,在对象内可以用this指向该对象
- apply,指定函数内的this指向的对象,如 getAge.apply(xiaoming,[]);
- call()把参数按顺序传入
- 高阶函数:将其他函数作为参数接受的函数
- map()函数定义在Array中,调用它生成要给原数组的关于指定函数的映射数组
- var result=arr.map(pow);
- reduce()也定义在Array中,它的作用是对数组做累积计算
- [x1,x2,x3].reduce(f)=f(f(x1,x2),x3);
- filter,过滤掉Array中的某些元素,返回剩下的元素,接受的回调函数接受三个参数:element,index,array
- Array的sort函数默认将元素转换为String再排序,这里是一个坑,要对数组排序的话需要传入一个函数,
- every
- find
- findIndex
- 闭包,可以将函数作为返回值。示例
- 一个立即执行的匿名函数:function (x) { return x * x } (3);
- 可以利用闭包来封装一个私有变量。示例
- 箭头函数:x=>x*x,相当于匿名函数,简化了函数定义,有两种格式。(lambda)
- x=>{…return x*x;}
- (x,y)=>x*x+y*y;
- 箭头函数中的this总是指向词法作用域,即外层调用者,所以用call()或apply()调用箭头函数时无法对this进行绑定。
- generator:生成器,由function*定义,注意有*号,示例

标准对象

- 标准对象
- Date
- RegExp
	○ 正则表达式是一种用来匹配字符串的强有力的武器
	○ \d 匹配数字,\w 匹配一个字母或数字,. 匹配任意字符
	• *表示任意个字符,+表示字少一个字符,?表示0个或1个,{n}表示n个,{n,m}表示n-m个字符
	• []表示范围,A|B可以匹配A或B,^表示行的开头,$表示行的结束
	• 可以通过两种方式创建正则表达式。用test()方法判断字符串是否符合条件
	• 用split()切分字符串。split()接受一个参数,可以是字符串或者正则表达式
	• 用exec()可以提取字串,返回一个Array,第一个元素为整个字符串,后面的元素是匹配成功的字串
	• 正则匹配默认是贪婪匹配,可以加个?采用非贪婪匹配
	• 用标志g表示全局匹配
- JSON
	• JavaScript Object Notation的缩写,是一种数据交换格式
	• JSON中的数据类型:Number、boolean、string、null、array、object  及其中的任意组合
	• 规定字符集必须是UTF-8,字符串必须用双引号。
	• JSON.stringify(xiaoming,null,'   ');
	• 第二个参数可以是数组或者函数
	• 可以给对象定义一个toJSON()的方法。
	• 可以用JSON.parse()把JSON格式的字符串变成一个JacaScript对象

面向对象编程

- 面向对象编程
- JavaScript不区分类和实例的概念,它是通过原型来实现面向对象编程的。
- xiaoming.__proto__=student;
- 构造函数定义了以后,可以用new来调用这个函数
- class…extends..来实现继承

浏览器

- 浏览器
- 浏览器对象
	○ window--innerWidth,innerHeight,outerWidth,outerHeight
	○ navigator--appName,appversion,language,platform,userAgent
	○ screen--width,height,colorDepth
	○ location--href,protocal,host,port,pathname,Search,hash
	○ document--title,getElementsById(),getElementsByTagName(),getElementsByClassName(),Cookie
	○ history--back(),forward()
- 操作DOM
	○ HTML文档被浏览器解析后就是一颗DOM树,操作DOM节点有以下几个操作:
		§ 更新
		§ 遍历
		§ 添加
		§ 删除
	○ 首先需要先获得这个节点,有两种方法
		§ getElementById()…
		§ querySelector()、querySelectorAll()
	○ 更新DOM,有两种方法
		§ 修改innerHTML属性,可以直接修改其内部子树
		§ 修改innerText或textContent属性,
		§ 也可以修改CSS,用style属性对应的所有CSS都可以直接获取或修改
	○ 插入新节点有两种方法
		§ appendChild()
		§ parentElement.insertBefore(newElement,referenceElement)
	○ 删除,调用父节点的removeChild
- 制作表单
	○ HTML表单的输入控件主要有:
		§ 文本框,<input type="text">
		§ 口令框,password
		§ 单选框,radio
		§ 复选框,checkbox
		§ 下拉框,select
		§ 隐藏文件,hidden
	○ 获取值,value,用于text,password,hidden,select,对于单选和复选,要用checked判断
	○ HTML5控件,包括date、datetime、datetime-local、color
	○ 提交表单,有两种方式
		§ 通过	<form>	元素的	submit()	方法提交一个表单
		§ 响应<form>本身的onsubmit事件
	○ 操作文件
		§ HTML表单中,可以上传文件的唯一空间是<input  type="file">
		§ 表单中包含"file"时,enctype必须指定为multipart/form-data,method必须指定为post,浏览器才能正确编码并以multipart/form-data格式发送表单的数据。
		§ JavaScript可以在提交表单时对文件扩展名做检查,防止用户上传无效格式的文件。
		§ HTML5的File API提供了File和FileReader两个主要对象,可以获得文件信息并读取文件。
	○ AJAX
		§ Asynchronous JavaScript and XML,意思是用JavaScrpt执行异步网络请求
		§ 在浏览器上写AJAX主要依靠XMLHttpRequest对象
		§ 创建XMLHttpRequest对象后,要先设置onreadystatechange的回调函数,回调函数中通过readState===4判断请求是否完成,如果已完成,再根据status===200判断是否是一个成功的响应。
		§ XMLHttpRequest对象的open()方法有三个参数,第一个指定GET还是POST,第二个指定URL地址,第三个指定是否使用异步,默认是true
		§ 最后调用send()方法才真正发送请求,GET不需要参数,POST请求需要把body部分以字符串或者FormData对象传进去。
		§ 上面URL使用的是相对路径,如果要用JavaScript请求外域的URL,有以下几种方法:
			□ 通过Flash插件
			□ 通过同源域名下架设一个代理服务器
			□ JSONP,但只能用GET请求
			□ CORS,Cross-Origin Resource Sharing
	○ Promise
		§ then,catch
		§ race
	○ canvas
		§ getContext('2d')	2D
		getContext('webgl')	3D
		§ Path2D

jQuery

- jQuery
- Write Less, Do More
- $:变量jQuery的别名,本质上是一个函数,也是一个对象,除了可以直接调用外也有很多其他属性
- 选择器
	○ var div=$('#abc');  //#开头,返回的对象是jQuery对象,按ID查找
	○ var divDom=div.get(0);
	○ var another=$(divDom);
	○ var ps=$('p');   //返回所有<p>的节点,按tag查找
	○ var a-$('.red');//返回所有包含class=red的节点,按class查找
	○ var a=$(.red.green');//同时包含red和green的节点
	○ var email=$('[name=email]');//按属性查找
	○ var icons=$('[name^=icon]';//name属性值以icon开头的DOM
	○ var names=$('[name$=with]');//name属性值以with结尾的DOM
	○ var emailInput=$('input[name=email]');//组合查找,<input>中的属性查找
	○ $('p,div');//多项选择器
- 层级选择器,$('ancestor descendant') 中间用空格隔开
- 子选择器,$('parent>child')
- 过滤器,$('ul.lang li:first-child');  
- 表单相关
- 查找和过滤
	○ find(),本身接受一个任意的选择器
	○ parent(),从当前节点开始向上查找
	○ 同一层级的节点,用next()和prev()
	○ filter()
	○ first(),last(),slice()
- 操作DOM
	○ jQuery对象的text()和html()方法分别获取文本和原始的HTML文本。
	○ 通过传入参数可以设置文本,对对象执行的操作作用在对应的一组DOM节点上
	○ 修改CSS,利用它的”批量操作“的特性,使操作方便很多
	○ div.css('color','#333333');
	○ hasClass,addClass,removeClass
	○ show()和hide():显示和隐藏,也可以设置CSS的display属性
	○ width()和height(),直接获取宽高信息
	○ attr()和removeAttr()方法用于操作DOM节点的属性
	○ prop()和attr()类似
	○ 操作表单
		§ val()获取和设置value属性
- 修改DOM结构
	○ 添加DOM
		§ append(),可以传入字符串,或者原始DOM对象,jQuery对象和函数对象
		§ prepend()添加到最前
		§ after()
	○ 删除节点,remove()
- 事件
	○ on,或者直接click
	○ 能够绑定的事件有,鼠标事件
		§ click
		§ dblclick
		§ mouseenter
		§ mouseleave
		§ hover:鼠标进入和退出时触发两个函数
	○ 键盘事件
		§ keydown
		§ keyup
		§ keypress
	○ 其他事件
		§ focus:获得焦点
		§ blur:失去焦点
		§ change:内容改变
		§ submit:表单提交
		§ ready:页面被载入并且DOM树完成初始化后,仅用于document对象,适合用来写初始化代码,因为这个事件使用过于普遍,可以简写为$(function(){…});
	○ 通过off()可以将已经绑定的事件解除绑定。
- 动画
	○ show(),hide(),传递一个时间参数进去就变成了动画,toggle()
	○ slideUp,slideDown,slideToggle
	○ fadeIn, fadeOut, fadeToggle
	○ animate()
	○ delay()
- AJAX
	○ ajax(url,settings),常用的选择有
		§ async,true
		§ method,GET, POST,PUT
		§ contentType,发送POST请求的格式
		§ data
		§ headers,发送的额外的HTTP头,必须是一个object
		§ dataType,接收的数据格式,可指定为html, xml, json, text等
	○ qXHR,类似于Promise
	○ get
	○ post
	○ getJSON
- 扩展
	○ 通过 $.fn,给jQuery对象绑定一个新方法
		§ 插件最后要return this;以支持链式调用
		§ 默认值绑定在$.fn.<pluginName>.defaults上
		§ 调用时可传入默认值以便覆盖默认值
	○ extermal, filter可以针对特定的DOM元素

错误处理

- 错误处理:
- try…catch…finally
- throw

underscore

- underscore
- underscore提供了一套完善的函数式编程接口。
- 类似于jQuery,underscore将自身绑定在唯一的全局变量_上
	○ _.map([1,2,3].(x)=>x*x);
	○ 可以作用于Object上
	○ _.map({a:1;b:2;c:3},(v,k)=>k+'='+v);
- Collections,支持Array,Object
	○ map/filter
	○ every/some
	○ max/min
	○ groupBy
	○ shuffle/sample
- Arrays
	○ first/last
	○ flatten,将Array变成一维的
	○ zip/unzip
	○ object
	○ range
- Functions
	○ bind()
	○ partial(),偏函数
	○ memoize,自动缓存函数计算的结果
	○ once()保证某个函数执行且仅执行一次。
	○ delay(),效果和setTimeout()是一样的
- Objects
	○ keys/allKeys
	○ values
	○ mapObject()
	○ invert()
	○ extend/extendOwn
	○ clone  浅复制,两个对象相同的key引用的value其实是同一个对象
	○ isEqual
- Chaining

Node.js

- Node.js
- 历史
	○ 微软通过IE击败Netscape,然后浏览器毫无进步
	○ Mozilla推出FireFox,Apple推出WebKit内核的Safari
	○ Google推出基于WebKt内核的Chrome,然后开发了一个高性能JavaScript引擎,V8
	○ Ryan于2009年推出了基于JavaScript和V8的开源Web服务器项目,命名为Node.js。它第一次把JavaScript带入到后端服务器开发。
	○ 它的优势:可以借助JavaScript的事件驱动机制和V8高性能引擎,轻松编写高性能Web服务器。
- 安装Node.js和npm
	○ 官网下载,node -v
	○ npm
		§ package manager,包管理工具
	○ 可以写一个简单的js文件,如hello.js,然后用node hello.js运行
	○ 通常是在命令行模式下,可以执行node进入交互式环境
	○ "use strict"
	○ node --use_strict cal.js
- 搭建Node开发环境
	○ Visual Studio Code
- 在Node中,一个.js文件就称为一个模块,module
	○ module.export=greet;//在模块中对外输出变量
	○ var greet=require('./hello');
	○ CommonJS规范
	○ JavaScript在浏览器中,不同js文件中变量可能存在命名冲突,这种语言本身没有保护机制可以在不同js文件中用同名的变量而不会冲突。为此,Node.js选择了比较聪明的做法,闭包,把一段js代码用一个函数包装起来,那么这段代码的所有变量都变成了函数内部的局部变量。
	○ 为了实现module.exports的输出,Node可以先准备一个对象,有两种方法可以在一个模块中输出变量
		§ 对module.exporst赋值
		§ 直接使用exports
- 基本模块
	○ fs--文件系统模块,读写,同时提供同步异步方法
		§ 因为JavaScript的单线程模型,执行IO操作时,JavaScript代码无需等待,而是传入回调函数,继续执行代码。同步操作虽然代码简单,但程序会等待IO操作,等待期间无法响应任何事件。
		§ fs.readFile('sample.txt','utf-8',function(err,data){});
		§ 对于一个二进制文件,fs.readFile('sample.png',function(err,data){});//回调函数的data参数将返回一个Buffer对象,一个包含零个或任意个字节的数组。它可以和String做转换,data.toString('utf-8'); var buf=Buffer.from(text,'utf-8');
		§ 同步读文件,readFileSync('sample.txt','utf-8');//可以用try…catch捕获可能的错误
		§ 写文件,writeFile(‘output.txt',data,function(err){});  //对应的同步方法为writeFileSync
		§ fs.stat(‘sample.txt',function(err,stat){});
		§ 大多数时候我们应该选择异步
	○ stream--又一个仅在服务区端可用的模块,支持流,他也是对象,createReadStream, createWriteStream
		§ data,chunk
		§ end
		§ error
		§ 以流的形式写入文件,通过调用write()方法,最后以end()结束
		§ 所有读取流继承自stream.Readable, 写入流继承自 stream.Writeable
		§ pipe,两个流可以串起来,rs.pipe(ws);
	○ http,一种浏览器和服务器之间的传输协议,
		§ HTTP请求的流程:
			□ 浏览器先向服务器发送HTTP请求,包括方法:GET、POST;路径;域名;以及其他的Header
			□ 服务器向浏览器返回HTTP响应,包括:响应代码,响应类型,及其他的Header
			□ 如果浏览器还需要继续向服务器请求其他资源,就再次发出HTTP请求,重复以上步骤
		§ request
		§ response
	○ crpto,提供通用的加密和哈希算法,用C/C++实现算法,通过cypto这个模块暴露为JavaScript接口。
		§ MD5,常用的哈希算法,给任意数据一个签名,这个签名用16进制字符串表示。
		§ update(),默认字符串编码为utf-8,也可以传入Buffer。
		§ Hmac,一种哈希算法,利用MD5或SHA1,它还需要一个密钥
		§ AES,对称加密算法
		§ Diffie-Hellman,一种密钥交换协议
		§ RSA,非对称加密算法,一个私钥和一个公钥构成的加密对。

Web开发

- Web开发
- Client/Server 模式,CS架构
- Brower/Server模式,BS架构
- Web开发经历的阶段
	○ 静态Web页面
	○ CGI,Common Gateway Interface,C/C++写的,处理表单
	○ ASP/JSP/PHP:Web应用需要频繁修改,所以需要用开发效率高的脚本语言。ASP:微软推出的用VBScript脚本编程的Web技术,JSP用Java,PHP本身是开源脚本语言
	○ MVC:Model-View-Controll模式,解决用脚本语言嵌入HTML导致可维护性差的问题,简化Web开发。ASP=>ASP.Net,JSP和PHP也有一大堆MVC框架
	○ 现在,Web开发技术继续向前发展,异步开发、新的MVVM前端技术层出不穷。
	○ 由于Node.js把JavaScript引入服务器端,现在也可以用Node.js开发。
- 用Node.js开发Web服务器端的几个显著优势:
	○ 语言是JavaScript
	○ 前后端统一
	○ 速度很快,支持异步
- 现在出现了无数的Web框架,在npm上发布的Node.js模块数量超过了30万个
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值