首页 > 代码库 > javascript权威指南笔记
javascript权威指南笔记
最近每天工作之余看下js的细节部分,时间不是很多,所以看的进度也不会太快,写个博客监督自己每天都看下。
以前不知道的细节或者以前知道但是没注意过的地方都会记录下来,所以适合有一定基础的,不适合零基础新手。
---------------------------------------------------------国庆期间---------------------------------------------------------
js中所有数字都是浮点数,比如5/2不是2,是2.5,0/0为NaN,如果想实现5/2=2可以采用5>>2=2
见未知
js中NaN和任何值都不相等,包括它自己,所以判断x是否为NaN可以用x!==x来判断
见未知
js 字符串,数值和布尔值都是不可变的
如:var s=“hello”
s.toUpperCase();
console.log(s)
输出s为hello而不是HELLO
因为函数返回的是一个新字符串,而本身是不会改变的。
见47页3.7
js类型转换表
见49页上
js中对象永远不相等,即使对象中的所有索引以及属性值都一样也不相等,同样两个单独的数组也是永远不相等
原因:对象为引用类型,对象的比较为引用的比较,当为同一个引用对象时才相同
也就是说
var a ={};
var b=a;
此时a===b为true。
见47页底部
变量作用域不受{}代码块限制,只受函数声明限制,函数体内声明的变量都被“提前”至函数体顶部,也就是说在函数体内任何地方定义的变量都可以在函数体内任意地方使用,只是有可能未赋值(如果使用在声明之前)
见57页3.10.1
1.声明的全局变量和2.未声明直接赋值产生的全局变量的不同之处。
1.不能用delete删除
2.可以用delete删除
见58页3.10.2
因为用户用var声明的变量不能用delete删除
见89页中上
.访问和[]访问的区别
.访问会直接查找.后的属性值
[]访问会计算括号内的表达式并转为字符串后进行访问
这个特点导致如果属性名称是一个保留字活着包含空格和标点符号,或是一个数字(对数组来说),则必须使用方括号
见63页底部
运算符相关
见66页
js比较运算符,如果比较的两个操作数,有一个为NaN,那么总是返回false
见77页上方
eval()作用
1.定义别名后eval就是全局的,此时可以在函数内使用全局变量的值(即使函数内有同名变量)
见85页代码段
2.未知
function定义
1.var funcname = function(){;}函数定义表达式
2.function funcname(){;}函数声明语句
区别:1.同var声明变量一样,只有变量声明被提前到了作用域顶部,但是没有值
2.整体都被提前
见95页底部
52-54需要细看
else if并不是真正的js语句,只不过是多条if/else 语句连在一起时的一种惯用写法
见98页
使用switch的场景
所有分支都依赖同一个表达式的值时,重复计算多条if语句中的表达式非常浪费
见99页上
switch中case后面的表达式与switch后的表达式的值是用“===”进行判断
见99页中
default可以放在switch内任何地方
见101页上
5.5.4
for/in
不太懂这个object和variable
见104页
标签语句
类似c语言goto,不常用,使用方法不熟悉
见106页
continue语句在不同循环体中不同的表现行为
while 判断开始的循环表达式
do/while 判断结尾的循环表达式
for 先计算自增表达式,再判断循环表达式
for/in 遍历下一个属性名
见108页5.6.3
throw的向上传递
见110页5.6.5下
finally执行问题
只要try语句中有一部分代码执行了,finally就会执行。就算try中使用了return,continue,break也是如此
利用try/finally使while循环模拟for循环(无法完美实现)
见112页下
with语句
将对象添加到作用域链的头部,不建议使用
见113页5.7.1
debugger
设置程序断点,用于程序调试(作为ACMer)
见114页5.7.2
“use strict”
使用严格模式
严格模式区别(前三条非常重要):
1.禁止使用with语句
2.所有变量都要先声明
3.调用的函数(不是方法)中的this为undefined
4.通过call和apply来调用函数时,this就是传入的第一个参数
其余见115页中
---------------------------------------------------------------------------------------------------------------------------
看到118页
见未知
js中NaN和任何值都不相等,包括它自己,所以判断x是否为NaN可以用x!==x来判断
见未知
js 字符串,数值和布尔值都是不可变的
如:var s=“hello”
s.toUpperCase();
console.log(s)
输出s为hello而不是HELLO
因为函数返回的是一个新字符串,而本身是不会改变的。
见47页3.7
js类型转换表
见49页上
js中对象永远不相等,即使对象中的所有索引以及属性值都一样也不相等,同样两个单独的数组也是永远不相等
原因:对象为引用类型,对象的比较为引用的比较,当为同一个引用对象时才相同
也就是说
var a ={};
var b=a;
此时a===b为true。
见47页底部
变量作用域不受{}代码块限制,只受函数声明限制,函数体内声明的变量都被“提前”至函数体顶部,也就是说在函数体内任何地方定义的变量都可以在函数体内任意地方使用,只是有可能未赋值(如果使用在声明之前)
见57页3.10.1
1.声明的全局变量和2.未声明直接赋值产生的全局变量的不同之处。
1.不能用delete删除
2.可以用delete删除
见58页3.10.2
因为用户用var声明的变量不能用delete删除
见89页中上
.访问和[]访问的区别
.访问会直接查找.后的属性值
[]访问会计算括号内的表达式并转为字符串后进行访问
这个特点导致如果属性名称是一个保留字活着包含空格和标点符号,或是一个数字(对数组来说),则必须使用方括号
见63页底部
运算符相关
见66页
js比较运算符,如果比较的两个操作数,有一个为NaN,那么总是返回false
见77页上方
eval()作用
1.定义别名后eval就是全局的,此时可以在函数内使用全局变量的值(即使函数内有同名变量)
见85页代码段
2.未知
function定义
1.var funcname = function(){;}函数定义表达式
2.function funcname(){;}函数声明语句
区别:1.同var声明变量一样,只有变量声明被提前到了作用域顶部,但是没有值
2.整体都被提前
见95页底部
52-54需要细看
else if并不是真正的js语句,只不过是多条if/else 语句连在一起时的一种惯用写法
见98页
使用switch的场景
所有分支都依赖同一个表达式的值时,重复计算多条if语句中的表达式非常浪费
见99页上
switch中case后面的表达式与switch后的表达式的值是用“===”进行判断
见99页中
default可以放在switch内任何地方
见101页上
5.5.4
for/in
不太懂这个object和variable
见104页
标签语句
类似c语言goto,不常用,使用方法不熟悉
见106页
continue语句在不同循环体中不同的表现行为
while 判断开始的循环表达式
do/while 判断结尾的循环表达式
for 先计算自增表达式,再判断循环表达式
for/in 遍历下一个属性名
见108页5.6.3
throw的向上传递
见110页5.6.5下
finally执行问题
只要try语句中有一部分代码执行了,finally就会执行。就算try中使用了return,continue,break也是如此
利用try/finally使while循环模拟for循环(无法完美实现)
见112页下
with语句
将对象添加到作用域链的头部,不建议使用
见113页5.7.1
debugger
设置程序断点,用于程序调试(作为ACMer)
见114页5.7.2
“use strict”
使用严格模式
严格模式区别(前三条非常重要):
1.禁止使用with语句
2.所有变量都要先声明
3.调用的函数(不是方法)中的this为undefined
4.通过call和apply来调用函数时,this就是传入的第一个参数
其余见115页中
---------------------------------------------------------------------------------------------------------------------------
看到118页
javascript权威指南笔记
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。