【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判断对象是否具有某属性,属性可能为对象自有属性也可能为继承属性,如果查看是否为对象的自有属性,用hasOwnPropertynull,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指向全局对象,也就是windowECMA决定,在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的生成器generatorjs原型继承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——读写文件 读写文件前,我们先必须了解一下,在磁盘上读写文件的功能都是由操作系统提供的,现代操作系统不允许普通的程序直接操作磁盘,所以,读写文件就是请求操作系统打开一 ...
随机推荐
- UIBezierPath 类的使用
使用UIBezierPath类可以创建基于矢量的路径,这个类在UIKit中.此类是Core Graphics框架关于path的一个封装.使用此类可以定义简单的形状,如椭圆或者矩形,或者有多个直线和曲线 ...
- Eclipse常用设置和快捷键
1.提示键配置一般默认情况下,Eclipse ,MyEclipse 的代码提示功能是比Microsoft Visual Studio的差很多的,主要是Eclipse ,MyEclipse本身有很多选项 ...
- Conferences
中国学术会议在线 :http://www.meeting.edu.cn 中国会议网: http://www.chinameeting.com 香山科学会议:http://www.xssc.ac.cn/ ...
- QtWebkits如何向QtWebEngine过渡
QtWebkits如何向QtWebEngine过渡 1. 前言 很遗憾,QtWebkits在Qt5.6以上版本被淘汰了,对于这个接口良且和其他类例如QWebFrame完美结合的组件就这么没了,我只能表 ...
- zookeeper的几种使用场景
1.数据的发布与订阅 通过发布与订阅实现配置的信息的统一管理,主要采用zk节点可以存储数据的特性,我们可以将一些配置信息存放到某一节点上,订阅这个节点的服务就可以动态的获取这个节点的数据.在应用启动的 ...
- FinFET简介
什么是FET? FET 的全名是“场效电晶体(Field Effect Transistor,FET)”,先从大家较耳熟能详的“MOS”来说明.MOS 的全名是“金属-氧化物-半导体场效电晶体(Met ...
- webpack-dev-server启动后, localhost:8080返回index.html的原理
webpack-dev-server是一个采用Node.js Express实现的微型服务器, 内部使用webpack-dev-middleware来响应发送到服务器监听单口的HTTP请求. webp ...
- 调试wmi连接主机进行监控
wmi连接及配置 1.首先介绍两款连接wmi的工具: ①windows自带的wbemtest. ②WMI 资源浏览器 两者都是可以连接wmi,并且执行相关命令的工具. 2.尝试连接首先利用win自带的 ...
- hash函数的选择
哈稀函数按照定义可以实现一个伪随机数生成器(PRNG),从这个角度可以得到一个公认的结论:哈希函数之间性能的比较可以通过比较其在伪随机生成方面的比较来衡量. 一般来说,对任意一类的数据存在一个理论上完 ...
- spring使用bean
ApplicationContext 应用上下文,加载Spring 框架配置文件 加载classpath: new ClassPathXmlApplicationContext(“applicatio ...