1:typeof 用来判断变量的数据类型,虽然null是Null数据类型,但返回的是object数据类型;虽然函数是object数据类型,但返回的是function类型

var x=null;typeof x;
"object"

function x(){}; typeof x;
"function"

2:undefined值派生自null值,对它们的相等性测试返回true;"=="操作符处于比较目的会转换其操作数

undefined==null
true

3:Boolean类型的字面值true和false是区分大小写的,即:True和False都不是Boolean值,是标识符

var y=true;y;
true

4:可以对任何数据类型的值调用Boolean函数,而且总会返回一个Boolean值;if语句会自动执行相应的Boolean转换

Boolean(0)
false
Boolean("")
false
Boolean(undefined)
false
Boolean(null)
false
Boolean(false)
false
Boolean(NaN)
false

5:ECMAScript5引入了严格模式的概念:通过在脚本顶部添加代码编译指示“use strict”的方式,支持严格模式的浏览器包括IE10+,Firefox4+,Safari5.1+,Opera12+和Chrome

"use strict"
function x(){x=5;}
x();
undefined

6:八进制和十六进制

var x=070,y=9;x+y
65
var x=0xA,y=9;x+y
19
var x=0xa,y=9;x+y
19

7:基于IEEE754数值的浮点计算通病,浮点数值计算会产生舍入误差

0.1+0.2
0.30000000000000004

8:NaN两特点:任何涉及NaN的操作都返回NaN;NaN和任何值都不相等,包括本身

5/0
Infinity
NaN/0
NaN
NaN==NaN
false

9:Number函数可以用于任何数据类型,parseInt和parseFloat主要用于把字符串转换成数值

Number("")
0
parseInt("")
NaN
Number(null)
0
parseInt(null)
NaN
Number(undefined)
NaN
parseInt(undefined)
NaN
Number( 456KK)
VM1205:2 Uncaught SyntaxError: Unexpected token ILLEGAL
Number(" 456KK")
NaN
parseInt(" 456KK")
456
parseInt(false)
NaN
parseInt(22.5)
22
parseInt(070,8)
46
parseInt(0xa)
10
parseFloat(0xa)
10
parseFloat(0xa,10)
10
parseFloat(0xa,16)
10

10:中文两个字节,返回值有问题

var x="你好";x.length
2

11:转换字符串:toString()方法,String()函数,+空字符串

var x=1;x.toString()
"1"
var x=20;x.toString(16)
"14"
var x=null;String(x)
"null"
var x=undefined;String(x)
"undefined"
undefined+""
"undefined"
1+""
"1"
null+""
"null"
true+""
"true"

12:ECMAScript操作符的与众不同在于它们能够适用于很多值,例如:字符串,数字值,布尔值,甚至对象

var x="";x++
0
var x=true;x++
1
true+false
1
true+""
"true"
true+"ccc"
"trueccc"
true+{}
"true[object Object]"
{}++
VM2136:3 Uncaught SyntaxError: Unexpected token }
var x={};x++
NaN
({})+true
"[object Object]true"

13:位操作符(无符号右移>>>,有符号右移>>,左移<<,按位异或^,按位或|,按位与&,按位非~)

var x=100;
x=~x
-101
var x=25&3
undefined
var x=25 & 3
undefined
var x=25 & 3;x
1
var x=25 | 3
undefined
var x=25 | 3;x
27
var x=25 ^ 3;x
26

14:Boolean类型转换方法:!!方法和Boolean方法

var x="";Boolean(x);
false
var x="";!!x;
false

15:逻辑与,逻辑或

({}) && true
true
true && ({})
Object {}
"" && true
""
null && true
null
false && ({})
false
"" && null
""

16:注意“1”性操作符容易犯的错误

true+1
2
"1"+1
"11"
"1"*1
1
"1"-1
0

17:两个字符串比较,比较字符编码值,大写字母的字符编码全部小于小写字母的字符编码

"Abc"<"abc"
true
"abc"<"cde"
true
"dbc"<"cde"
false
NaN<3
false
NaN>=3
false
"23"<"3"
true
"23"<3
false

18:要比较相等性之前,不能将null和undefined转换成其它任何值;但是小于或者大于比较时,确可以进行数值转换

null<1
true
undefined<1
false
Number(undefined)
NaN
null==0
false
undefined==0
false
null>0
false
null<0
false

19:ECAMAScript中不存在块级作用域,因此在循环内部定义的变量也可以在外部访问到

for(var i=0;i<2;i++){}alert(i);

for(;;){break;}

20:with语句的作用是暂时改变作用域链、减少的重复输入;js的解释器需要检查with块中的变量是否属于with包含的对象,这将使with语句执行速度大大下降,并且导致js语句很难被优化。所以在以后的高效代码开发中我们应该尽可能的避免使用with语句

with(this){var a=1;}alert(a);

21:swich语句在比较值时使用的全等操作符。可以在switch语句中使用任何数据类型;每个case值不一定是常量,可以是变量,甚至是表达式

22:arguments是与数组类似的一个对象。修改arguments对象中的值会反映到命名参数中,但修改命名参数的值不会影响arguments对象中的值。他们的内存空间是独立的,但是他们的值是单行同步;没有传递值得命名参数自动被赋予undedifined值

function finn(a,b,c)
{
console.log(arguments[0]);
arguments[1]=5;
console.log(arguments[1]);
console.log(b);
console.log(c);
}
finn(1,2);
VM1958:4 1
VM1958:6 5
VM1958:7 5
VM1958:8 undefined

23:ECMAScript函数不能像传统意义那样实现重载;如果定义两个名字相同的函数,则该名字只属于后定义的函数。没有函数签名的概念

function finn (a)
{
console.log(a);
};
function finn(a,b)
{
console.log(a+1);
};
finn(1);
VM2237:8 2

24:异常信息:SyntaxError: Unexpected token ILLEGAL(意外的非法标记),往往是由于中英文状态错了

var x=1;x // 英文分号写成了中文
VM2319:2 Uncaught SyntaxError: Unexpected token ILLEGAL

25:<script>标签特性:外部javascript扩展名不是必须,动态生成javascript代码成为可能;可以包含外部域的文件;defer延迟脚本

26:javascrpt诞生于1995年。dom,既然是一种模型,那么他就不仅仅限制于JavaScript可以去实现他,在很多语言里,都可以直接进行dom的相关操作。javascript中的dom实现,只是这种语言对于dom的实际应用