基本概念
"use strict" 其实它是一个编译指示,用于告诉支持的JavaScript引擎切换到严格模式。
给未声明的变量赋值在严格模式下会导致抛出ReferenceError错误。
typeof操作符是一种可以用来检测给定变量的数据类型的一种手段(typeof操作符)。
null值表示一个空对象指针,而这也正是使用typeof操作符检测null值时会返回"object"的原因。具体请看:为什么 typeof null === "object" ?
只要意在保存对象的变量还没有真正保存对象,就应该明确地让该变量保存null值。这样做不仅可以体现null作为空对象指针的惯例,而且有助于进一步区分null和undefined。
八进制字面值的第一位必须是零(0),然后是八进制数字序列(0~7)。如果字面值中的数值超出了范围,那么前导零将被忽略,后面的数值将被当做十进制数值解析。
八进制字面量在严格模式下时无效的,会导致支持该模式的JavaScript引擎抛出错误。
十六进制字面值的前两位必须是0x,后跟任何十六进制数字(0~9及A~Z),其中字母A~Z可以大写,也可以小写。
在进行算数计算时,所有以八进制和十六进制表示的数值最终都将被转换成十进制数值。
parseInt函数第二个参数,转换时使用的基数(即多少进制)。也就是说,第一个参数是以多少进制转为十进制。
由于parseFloat()只解析十进制值,因此它没有用第二个参数指定基数的用法。
String数据类型包含一些特殊的字符字面量,也叫转义序列,用于表示非打印字符,或者具有其他用途的字符。
字面量 | 含义 |
\n | 换行 |
\t | 制表 |
\b | 退格 |
\r | 回车 |
\f | 进纸 |
\\ | 斜杠 |
\' | 单引号 |
\" | 双引号 |
数值、布尔值、对象和字符串值都有toString方法,但null和undefined值没有该方法。多数情况下,调用toString方法不必传递参数,但是在调用数值的toString方法时,可以传递一个参数:输出数值的基数。
实例对象都具有下列属性和方法:
- constructor
- hasOwnProperty(propertyName)
- isPrototypeOf(object)
- propertyIsEnumerable(propertyName)
- toLocalString()
- toString()
- valueOf()
function fn(){} Function.prototype.isPrototypeOf(fn) //true
执行前置递增或递减操作时,变量的值都是在语句被求值以前改变的。后置递增或递减是在包含它们的语句被求值之后才执行的。
在对非数值应用一元加操作符时,该操作符会像Number()转换函数一样对这个值执行转换。eg: +new Date() => new Date().getTime()
同时使用两个逻辑非操作符,实际上就会模拟Boolean()函数的行为。其中,第一个逻辑非操作会基于无论什么操作数返回一个布尔值,而第二个逻辑非操作则对该布尔值求反,这样就得到了这个值真正对应的布尔值。
在比较字符串时,实际比较的是两个字符串中对应位置的每个字符的字符编码。(大写字母的字符编码全部小于小写字母的字符编码)
在做相等比较时,不能讲null和undefined转换成其他任何值。
do-while语句:后测试循环语句,即只有在循环体中的代码执行之后,才会测试出口条件。换句话说,在对表达式求职之前,循环体内的diamante至少会被循环一次。
while语句:前测试循环语句。循环体内的代码被执行之前,就会对出口条件求值。因此,循环体内的代码可能永远不会被执行。
for语句也是一种前测试循环语句,但它具有在执行循环之前初始化变量和定义循环后要执行的代码的能力。
switch语句在比较值时使用的是全等操作符,因此不会发生类型转换。
函数的length属性指的是函数定义的(希望接收)参数数量,arguments对象的length属性可以获知有多少个参数传递给了函数。
arguments对象中的值会自动映射到对应的命名参数,这并不是说读取这两个值会访问相同的内存空间,它们的内存空间是独立的,但它们的值会同步。