【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——读写文件 读写文件前,我们先必须了解一下,在磁盘上读写文件的功能都是由操作系统提供的,现代操作系统不允许普通的程序直接操作磁盘,所以,读写文件就是请求操作系统打开一 ...
随机推荐
- SQL Server 创建用户
增加角色 role_for_nc 1.exec sp_addrole 'role_for_nc'; 创建一个 SQL Server 登录名wlzx,密码为"123",默认数据库为 ...
- Javascript 对象(Object)
//声明方式 //调用 Object构造函数创建 var user = new Object(); user.name = "小白"; user.say = function () ...
- webpack中package.json中的Script
初始化项目 cnpm init -y ,会自动生成一个package.json文件:主要是显示项目的名称.版本.作者.协议等信息 在package.json中scripts中配置:(运行简化) 开发模 ...
- 排序 & 常用算法
一.快速排序QuickSort 快速排序和归并排序都使用分治法来设计算法,区别在于归并排序把数组分为两个基本等长的子数组,分别排好序之后还要进行归并(Merge)操作,而快速排序拆分子数组的时候显得更 ...
- Oracle数据库触发器使用(删除触发)
当我们需要用到触发器的时候,还是很方便,你会指定当我在操作某一事件时触发效果完成我所希望完成的事情:这就是触发器, 下面我给大家上一串代码,这是一个当我在操作删除事件操作时候,我希望把即将删除那条数据 ...
- Django Rest Framework进阶二
一.版本 版本控制:当程序越来越大,后期需要再加入一些功能或者进行二次开发时就需要加上版本号了. 之前我们在没有接触rest_framework之前一般是以下这种方式来实现的 class UserVi ...
- 一本通 1260:【例9.4】拦截导弹(Noip1999)
拦截导弹(Noip1999) 经典dp题目,这个做法并非最优解,详细参考洛谷导弹拦截,想想200分的做法. #include <iostream> #include <cstdio& ...
- JavaScript库 — — React
React不支持IE6.IE7 React是什么?用于构建用户界面的JAVASCRIPT库,是MVC中的V(视图). React特点:1. 声明式设计2. 减少与DOM的交互,高效3. JSX - J ...
- Java学习笔记——集合
类集简介 从JDK1.2开始Java引入了类集开发框架,所谓的类集指的就是一套动态对象数组的实现方案,在实际开发之中没有有何一项开发可以离开数组,但是传统的数组实现起来非常的繁琐.而且长度是其致命伤, ...
- Linux centos6.x 配置免密码登录
免密码登录主要就是被访机器提供公匙给访问者,然后访问者使用ssh协议时可以使用所配置好的公匙验证.这样就免去了输入密码的麻烦. 某些集群例如hadoop,一般都需要将主机和其他机器间配置无密码公匙认证 ...