JavaScript学习笔记(持续更新中)
《JavaScript编程精解》读书笔记
基础
- 6种基本类型:number,string,Boolean,object,function,undefined
- 字符串用单引号双,引号都可以(没有差别?)
- 字符串可以直接比较大小(根据unicode)
- typeof是一元操作符,返回指定值的字符串
- 在给定时间存在的变量和变量值的集合叫做环境
- js有+=,-+,++,--运算符
- js的for,while,do-while,switch,注释与C语言一致
- js中需要注意的值
- undefined表示没有定义
- null表示该值已被定义但是没有任何值
- 检测某对象是否有值:something==undefined
- null==undefined返回true
- 棘手的自动类型转换(1)
- false==0 -> true
- ""==0 -> true
- "5"==5 -> true
- 0,"",null,underfined,false都会转换成false
- 棘手的自动类型转换(2)
- "apple" + 5 -> "apple5"
- null + "ify" -> "nullify" (这个好奇葩)
- "5" * 5 -> 25
- "apple" * 5 -> NaN
- NaN表示"不是一个数字",NaN的所有算数操作的结果都是NaN,并且NaN==NaN -> false,检查一个值是否为NaN,用函数:isNaN
- 判断两个值是否精确相等用:===,!==
- null===undefined -> false
- flase===0 -> false
- ""===0 -> false
- "5"===f -> false
函数
- return后面没有返回值时,函数返回undefined
- 函数可以先使用后定义(程序运行前会查找所有function定义)
- 函数中用var来定义局部变量
-
函数是唯一能创建新作用域的地方
var something=1; { var something=2; }
两个something引用的是同一个值,最新值都是2。(所以if之类的语句中的变量都是全局的?-->YES,见下面的例子)
自己想的一些例子:
var g=1; function func(){ write(g); var g=10; write(g); } function write(text){ document.write(text+"<br>") } func(); //输出: undefined 10
暂时还解释不太清楚:函数中定义的局部变量会覆盖外部环境的同名变量,并不是在局部变量定义的时刻才覆盖,而是一开始就覆盖,不过初始值为undefined。
if(true){ var g=10; } for (var i = 0; i >= 0; i--) { }; function func(){ write(g) write(i) } function write(text){ document.write(text+"<br>") } func(); //输出: 10 -1
因为只有函数可以创建新的作用域,所以在if,for之类的语句中定义的变量作用域会蔓延到包含该语句变量的环境中的。
-
函数是值
var a=null; function b(){return "B";} (a || b)(); -> "B"
-
匿名函数
function(){return "B";}
- 对闭包描写较少,还不甚明了,只是知道:包裹一些局部变量的一个函数叫做一个闭包
- 可选参数:如果传入的参数过多,多余的参数被忽略;如果传入的参数过少,则缺失的参数默认为undefined。通过在函数中判断参数是否为undefined来实现可选参数。