js基础

js的声明的变量和其他的语言相似,局部遍历需要使用 var 关键字,如果没有改关键字,很容易被当成全局变量。
变量的提升:javascript的工作方式是先解析代码,获取所有被声明的变量,然后在一行一行的执行。
这样的后果是 所有的变量声明的语句都会被提升到代码的头部。
例如:

等价于


js对大写敏感,A 和 a 是2个不同的变量

如果需要判断2个变量完全相等,需要使用 “ === ”

js的数组可以塞入任何值,与lua不同的时,数组的下标是从0开始的:下面是声明一个数组

数组是一种特殊的对象,typeof运算符会返回数组的类型是object。
js规定数组的键名是字符串,之所以可以用数值读取,是因为非字符串的键名会转化成字符串。

检查某个键名是否存在的运算符in,适用于对象,也适用于数组。

js提供的for循环除了基本的for(;;)之外还有 for...in 不仅可以遍历对象,也可以遍历数组,不仅会遍历数组所有的数字键,还会遍历非数组键。
还有一种数组的forEach方法,也可以用来遍历数组。例如

数组的空位:当数组的某个元素是空元素,也就是2个逗号之间没有任何值,成为数组的空位。数组的空位不会影响到数组的length属性

使用forEach方法、for...in结构、以及Object.keys方法进行遍历,空位都会被跳过。
类似数组对象:如果一个对象的所有键名都是正整数或者零,并且有length属性,就称为类型数组的对象。例如:

数组的slice方法可以将"类似数组的对象"变成真正的数组

obj表示一个类似数组的对象,本来是不可以使用forEach()方法的,但是通过call(),可以吧forEach嫁接到obj上面调用。

但是这种方法比原生的forEach要慢,所以尽量先转成数组,在使用数组的方法
js的函数和其他变量一样属于一等公民,函数的属性和方法有:
name属性:

name属性返回的是function关键字后面的那个名字
length属性:

length属性返回的是函数参数的个数,函数参数的个数只与定义函数时的参数的个数有关,与传入的参数无关。
toString()方法:
返回的是一个字符串,是整个函数的源码 函数内部的注释也可以返回。
函数参数的传递方式需要注意的点:
如果是值传递,在函数体内修改参数值,不会影响到函数的外部。

如果是址传递,在函数体内修改参数,将会影响到原始值。

特别需要注意的,如果在函数内部将传入的变量整个变量都替换掉,不会影响函数外部的值。

js的参数是可以同名的,如果参数同名,则函数取最后一个同名的不被省略的参数

js允许函数拥有不定数目的参数,于是有了一种机制,允许从函数内部获取所有的参数,需要获取所有的参数,需要使用argument对象。argument对象包含了函数在允许时的所有参数,argument[0]表示函数的第一个参数。argument[1]表示函数的第二个参数.以此类推。
argument属于一个类似数组的对象,如果需要使用数组的方法,需要使用上文提到的方法将其转化为数组。
argument对象带有一个callee,返回它所对应的原函数。这个函数在严格模式下是禁用的,因此不建议使用。
函数的闭包:
例如:

函数内在定义一个函数,相当于f2是f1的子节点,子节点是可以访问父节点的变量,反过来是不行的,闭包的最大特点是可以记住诞生的环境,比如f2记录了它的诞生环境f1,所以f2可以访问f1的变量。闭包的好处有2个,一个是可以读取函数内部的变量,另一个就是可以使变量始终保存在内存中,即闭包可以使它诞生的环境一直存在。
立即调用表达式:在js中圆括号()是一种运算符,跟在函数名后面,表示调用该函数,有时我们在定一个函数时需要立刻调用它,我们可以这么写:

js中所有的数字都是以64位浮点数形式存储,所有1和1.0是用一个数。
NaN是js的特殊值,表示非数字,主要出现在将字符串解析成数字出错的场合,例如:
5 - "x"
需要注意的是,NaN不是独立的数据类型,而是一个特殊的数值,它的数据类型依然属于Number。

NaN不等于任何值,包括它本身。
NaN与任何数运算,包括它自己,结果都是NaN
NaN在布尔运算时被当成false
Infinity表示无穷。+Infinity表示正无穷 -Infinity表示负无穷
Infinity大于一切数值(除了NaN),-Infinity小于一切值(除了NaN)
parseInt方法:parseInt可以用来进制转化,第一个参数表示需要被转化的字符串,第二个参数表示需要被转化的进制。需要注意的是,如果第一个参数不是字符串,则会被先转化成字符串,在转化成整数。
parseFloat方法:parseFloat可以将字符串转化成小数,如果不能转化,则会变成NaN.
isNaN:方法可以判断一个值是否为NaN。isNaN方法可以用来判断一个值是否为NaN。isNaN只对数值有效,如果传入其他只,会被先转化成数值,但是传入字符串的时候,会被先转化为NaN,最后返回true。
isFinite方法:isFinite方法返回一个布尔值,表示某个值是否为正常的数值。除了infinity,NaN,
-infinity这三个值,其他的都会返回true。
对象:js的对象是一组键值对的集合,是一种无序的复合数据集合。
键名:js的键名都是字符串,如果定义的时候键名不是字符串,则会被自动转化为字符串。

原文地址:https://www.cnblogs.com/BigBabyTang/p/8438200.html