【js】【读书笔记】廖雪峰的js教程读书笔记
最近在看廖雪峰的js教程,重温了下js基础,记下一些笔记,好记性不如烂笔头嘛
- 编写代码尽量使用严格模式
use strict
JavaScript
引擎是一个事件驱动的执行引擎,代码总是以单线程执行- 执行中会自动在每行的结尾添加分号
- 区分大小写
- 浮点数通常比较难比较大小,参考es6 number epsilon
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
来代替多个参数 - 内部函数可以访问外部函数定义的变量,反之则不行;如果内部函数定义了与外部函数重名的变量,则内部函数的变量将“屏蔽”外部函数的变量
- 函数定义有个特点,它会先扫描整个函数体的语句,把所有申明的变量“提升”到函数顶部,JavaScript引擎自动提升了变量的声明,但不会提升变量的赋值
- 默认的全局对象
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.mapmap
的回调有4个参数,而如果如array.map(parseInt),parseInt只有2个参数,而且第二个参数和calltable第二个参数性质不一样,造成结果异常,示例请看廖雪峰的js小示例array
的filter
用法,用于对数组值的过滤array
的sort
排序函数,默认的是通过字符串的ascii
码进行排序,当然,sort
也是个高阶函数,你可以自定义排序算法- 错误包含逻辑错误(代码错误)和运行错误(权限,网络连接,文件不存在)
错误传播
如果在一个函数内部发生了错误,它自身没有捕获,错误就会被抛到外层调用函数,如果外层函数也没有捕获,该错误会一直沿着函数调用链向上抛出,直到被JavaScript引擎捕获,代码终止执行es6
的箭头函数(也属于匿名函数)- 箭头函数和匿名函数的区别为,箭头函数里的this总是指向词法作用域,也就是外层调用者(这里我也不大懂廖雪峰啥意思)
- 可变参数以3个点
·
开始,表面参数的个数不限制 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'
- 用String()来转换任意类型到string,或者直接调用某个对象的toString()方法;
- 通常不必把任意类型转换为boolean再判断,因为可以直接写if (myVar) {...}
- typeof操作符可以判断出number、boolean、string、function和undefined
- 判断Array要使用Array.isArray(arr)
- 判断null请使用myVar === null
- 判断某个全局变量是否存在用typeof window.myVar === 'undefined'
- 函数内部判断某个变量是否存在用typeof myVar === 'undefined'
- 任何对象都有toString()方法吗?null和undefined就没有!确实如此,这两个特殊值要除外,虽然null还伪装成了object类型。
- 数字转换成字符串
123..toString(); // '123', 注意是两个点!
(123).toString(); // '123'
node
查找模块的顺序依次为内置模块
,全局模块
,当前模块
node.js
加载模块时使用了匿名函数加载模块的方式来规避各个模块内变量冲突的问题- 判断是处于浏览器环境还是node环境
if (typeof(window) === 'undefined') {
console.log('node.js');
} else {
console.log('browser');
}
Date
相关- JavaScript的月份范围用整数表示是0~11,0表示一月,1表示二月
- 使用Date.parse()时传入的字符串使用实际月份0112,转换为Date对象后getMonth()获取的月份值为011
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
的同步异步的关系- 流的概念
- web协议简介
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'
- 删除后的dom节点虽然不在文档树中了,但其实它还在内存中,可以随时再次被添加到别的位置
JavaScript
代码都不可能同时有多于1个线程在执行- 跨域方法,1在同源下使用 2在同源下搭建代理服务器,代理服务器转发请求到真正的服务器 3jsonp方式,通过get请求js的方式那样请求数据 4 cros 跨域
js
,css
默认可以跨域,其他请求跨域需要经过处理es6
的promise
,canvas
用法
【js】【读书笔记】廖雪峰的js教程读书笔记的更多相关文章
- 廖雪峰Git入门教程
廖雪峰Git入门教程 2018-05-24 23:05:11 0 0 0 https://www.liaoxuefeng.com/wiki/00137395163059296 ...
- 廖雪峰的java教程
F:\教程\0-免费下载-廖雪峰 公司电脑地址: G:\学习中\廖雪峰的java教程 廖雪峰java课程地址: https://www.feiyangedu.com/category/JavaSE 0 ...
- git学习笔记——廖雪峰git教程
OK,先附上教程--廖雪峰的官方网站 友情连接:git官网 简介 这里我只想引用他的原文: Linus可以向BitMover公司道个歉,保证以后严格管教弟兄们,嗯,这是不可能的.实际情况是这样的: L ...
- 爬取廖雪峰的python3教程
从廖雪峰老师的python教程入门的,最近在看python爬虫,入手了一下 代码比较low,没有用到多线程和ip代理池 然后呢,由于robots.txt的限定,构建了一些user-agent,并放慢的 ...
- git常用命令总结--廖雪峰老师Git教程命令总结
学习了廖雪峰老师的Git教程之后的命令总结,重点关于git和远程仓库的东西. 如果没有学过,这是传送门 下面这个图很重要 一.git初始化本地仓库和配置 echo "想输入到文件的内容,一般 ...
- Python爬虫——用BeautifulSoup、python-docx爬取廖雪峰大大的教程为word文档
版权声明:本文为博主原创文章,欢迎转载,并请注明出处.联系方式:460356155@qq.com 廖雪峰大大贡献的教程写的不错,写了个爬虫把教程保存为word文件,供大家方便下载学习:http://p ...
- 廖雪峰老师Python教程读后笔记
廖老师网站:http://www.liaoxuefeng.com/wiki/0014316089557264a6b348958f449949df42a6d3a2e542c000 花几天时间看了廖老师的 ...
- 阅读廖雪峰老师git教程笔记
1.首先git是目前世界上最先进的分布式版本控制系统之一.所谓版本控制是针对工作中一些普遍的现象的. 比如,你写一份文档,期间,不断的改善,每次修改都会进行备份,久而久之,会有很多版本的同一份文档,但 ...
- 【廖雪峰老师python教程】——IO编程
同步IO 异步IO 最常见的IO——读写文件 读写文件前,我们先必须了解一下,在磁盘上读写文件的功能都是由操作系统提供的,现代操作系统不允许普通的程序直接操作磁盘,所以,读写文件就是请求操作系统打开一 ...
随机推荐
- Ubuntu18.10安装及优化
最近机器学习很火,想来学习下,先来搭建一个学习平台. https://www.ubuntu.com 下载最新版本的系统,我这里是 18.10 桌面版. 然后进行分区,我这里在vm只创建了 80G的硬盘 ...
- EF生成的表被更改后的错误
1.在Global.ascs设置 public class MvcApplication : System.Web.HttpApplication { protected void Applicati ...
- C语言中的重定向输入
所谓重定向输入,就是不用从键盘一组一组的输入数据,而是保存为一个文件,直接将该程序的测试数据进行输入即可:使用freopen()函数会将标准输入stdin重定向到文件input.txt(这个文件名自己 ...
- 获取iframe子页面节点,响应浏览器宽高
获取iframe子页面节点,响应浏览器宽高 html部分代码 <div> <iframe width="100%" height="100%" ...
- JAVA的图片文字识别技术
从2013年的记录看,JAVA中图片文字识别技术大部分采用ORC的tesseract的软件功能,后来渐渐开放了java-api调用接口. 图片文字识别技术,还是采用训练的方法.并未从根本上解决图片与文 ...
- Web前端开发规范(二)
3.HTML代码规范 .html文件必须存放在项目工程约定的目录中. .html文件的命名:以模块 + 功能的结合方式来命名,比如:newsList.html. 文档类型声明:HTML4中使用< ...
- WebAPI示例
一.新建项目 二. 代码: Models.Products实体类 public class Product { /// <summary> /// 产品编号 /// </summar ...
- Azure进阶攻略 | VS2015和Azure,想要在一起其实很容易
下雨天,巧克力和音乐很配…… 大冬天,男神和捧在手里的奶茶很配…… 「驴牌」的包包,和女神的全部衣服都配…… 对于「王首富」,容易实现的小目标和一个亿是绝配…… …… 醒醒吧!!这些事情和每天只会写代 ...
- HttpWebRequest Post请求webapi
1.WebApi设置成Post请求在方法名加特性[HttpPost]或者方法名以Post开头如下截图: 2.使用(服务端要与客户端对应起来)[单一字符串方式]:注意:ContentType = &qu ...
- Active Directory域服务备份
此篇介绍如何通过Windows Server Backup工具备份Active Directory域服务 AD 域系统状态 在域控制器上,系统状态通常包括以下内容,但所包含的数据实际上取决于服务器上安 ...