JavaScript学习笔记
这是我对廖雪峰的《JavaScript教程》的笔记。此文主要记录了JS与其他语言的特性差异,不包含对该语言中循环体等基础内容的介绍。
javascript注释://
JavaScript不区分整数和浮点数,统一用Number表示。
“==”操作符会自动转换数据类型再比较,很多时候,会得到非常诡异的结果;“===”操作符不会自动转换数据类型,如果数据类型不一致,返回
false
,如果一致,再比较。NaN
作为特殊的Number,与所有其他值都不相等,包括它自己。可通过isNaN()
函数判断NaN
。如果一个变量没有通过
var
申明就被使用,那么该变量就自动被申明为全局变量。在代码开头写上'use strict';
以避免这一问题。
如果通过索引赋值时,索引超过了范围,引起
Array
大小的变化.由于JavaScript允许传入任意个参数而不影响调用,因此传入的参数比定义的参数多(少)也没有问题。
arguments只在函数内部起作用,并且永远指向当前函数的调用者传入的所有参数。利用
arguments
,可以获得调用者传入的所有参数(即使参数没有被定义)。rest变量:获取输入参数中已定义参数外多值。
JavaScript的函数在查找变量时从自身函数定义开始,从“内”向“外”查找。如果内部函数定义了与外部函数重名的变量,则内部函数的变量将“屏蔽”外部函数的变量。
JavaScript的函数定义:先扫描整个函数体的语句,把所有申明的变量“提升”到函数顶部。为了防止出现奇怪的错误,请在函数内部先声明变量,再执行操作。
JavaScript实际上只有一个全局作用域。全局变量会绑定到
window
上,不同的JavaScript文件如果使用了相同的全局变量,或者定义了相同名字的顶层函数,都会造成命名冲突,并且很难被发现。解决方法之一是把自己的所有变量和函数全部绑定到一个全局变量中。用let替代var可以申明一个块级作用域的变量。
this in JS: 以对象的方法形式调用,比如
xiaoming.age()
,该函数的this
指向被调用的对象;如果单独调用函数,比如getAge()
,此时,该函数的this
指向全局对象,也就是window
。Array
的sort()
方法默认把所有元素先转换为String再排序。 //这设计真的有毒sort()
方法会直接对Array
进行修改,它返回的结果仍是当前Array
。JavaScript的月份范围用整数表示是0~11,
0
表示一月,1
表示二月。 //设计者数组上脑使用Date.parse()时传入的字符串使用实际月份01至12,转换为Date对象后getMonth()获取的月份值为0至11。
当我们用
obj.xxx
访问一个对象的属性时,JavaScript引擎先在当前对象上查找该属性,如果没有找到,就到其原型对象上找,如果还没有找到,就一直上溯到Object.prototype
对象,最后,如果还没有找到,就只能返回undefined
。