一.数据类型
1.原始类型
number string boolean null undefined object 对象
2.隐式转换
等于和严格等于
等于==
在类型不同时会尝试转换
严格等于===
3.包装对象
4.类型检测
方法:
1.typeof
typeof 100
"number"
typeof true
"boolean"
typeof function
"function"
typeof undefined
"undefined"
typeof new object()
"object"
typeof [1,2]
"object"
typeof NaN
"number" NaN 就是not number
typeof null
"object"
遇到null失效
2.obj instanceof Object
[1,2]instanceof Array===true
new Object() instanceof Array===false
不同的window或ifeame中不可以使用
3.object.prototype.toString
Object.prototype.toString.apply([])==="[object Array]"
IE6,7有bug
4.constructor
5.duck type
二.表达式和运算符
1.表达式
原始表达式
数组表达式
new Array(1,2)
[1,2]
{X:1,y:2} var o = new Object();o.x=1;o.y=2;
函数表达式
var fe = function(){};
属性访问表达式
var o ={x:1}
o.x o['x']
调用表达式
func()
对象创建表达式
new Func(1,2)
2.运算符
条件运算符
var val=true?1:2 //val = 1
逗号运算符
var val =(1,2,3); //val = 3
将逗号隔开的表达式都进行运算,然后取最右边的值。
Delete运算符
delete obj.x; var obj = {x:1} obj.x; //1 delete obj.x; obj.x //undefined
in 运算符
window.x = 1; 'x' in window /true
instanceof,typeof运算符
{} instanceof Object //true
typeof 10===number
new运算符
this 运算符
this;//Windows(浏览器)
var obj =={ func:function(){return this;} }; obj.func();//obj
void 运算符
只会返回undefined;
运算符优先级
图
三.语句和严格模式
语句
1.blick 块语句 {}
用于组合0~多个语句。块语句用一对花括号定义
没有块级作用域
2.var 声明语句
var a=b=1;
b会被声明为全局变量
声明多个变量使用逗号隔开
即var a=1,b=1; Atom.lnk
3.try catch 语句
这是一个异常捕获语句。
try{ throw "test"; }catch(ex){ console.log(ex);//test }finally{ console.log("finally") }
try 如果抛出异常就执行catch。不管如何都执行finally
4.function 语句
通过function定义函数对象 被称为函数声明
通过定义变量为函数表达式
函数前置(函数声明被优先处理)
5.for in 语句
var p; var obj={x:1,y:2} for(p in obj){ }
1.顺序不确定
2.enumerablewei为false时不会出现
3.for in对象属性时受原型链影响;
6.switch语句
break
7.循环语句 while do while for
8.with 语句
修改当前作用域
with({x:1}){ console.log(x); }
深层次调用
不建议使用
严格模式下禁用
严格模式
"use strict "