1 数据类型
1.1 数据类型
- 字符串型(String)、数字型(Number)、布尔型(Boolean)、对象型(Object)、未定义(undefined)
1.2 判断数据类型
- 判断数据类型-----typeof,但是在判断array类型时会返回Object,
- 解决方法:Object.toString.call();
- 使用jQuery方法判断
$.type()
1.3 数据类型转化
- parseInt()
- parseFloat()
- toString()
- Number()
2 变量
- 全局变量 num ---> window.num 造成全局变量污染,一般使用闭包的形式解决
- 局部变量 var num = 0;
2.1 变量提升
//变量提升,还有一种说法就是浏览器预解析
function test() {
var a = 1;
var b = 'abc';
var c = 'hello';
var fn = funciton (){};
}
//上述代码等价于
function test() {
var a, b, c, fn;
a = 1;
b = 'abc';
c = 'hello';
fn = funciton (){};
}
2.2 函数执行环境和作用域
2.2.1 全局作用域 (全局变量)
- 最外层函数和在最外层函数外面定义的变量拥有全局作用域。
- 函数本身也是一个特殊的变量,其名字就是函数名
- 未定义直接赋值的变量自动声明为拥有全局作用域
- 所有window对象的属性拥有全局作用域,window对象的内置属性都拥有全局作用域.eg:window.location
- 执行环境类似一个表格:第一行放置全局变量,第二行:放置局部变量
- 变量搜索机制:先搜索局部变量,如果没有找到,就会搜索全局变量
//函数执行
function test()[
// 由于变量明提升,这里的a变量是存在的,未赋值会是:undefined
console.log(a);
// fn是一个函数就像变量一样,解析的时候会提升,所以能都访问到
console.log(fn());
var a = 1;
function fn(){
retuen 10;
}
]
test();
2.2.2 变量提升面试题
var v = "hello";
function test (){
console.log(v);
var v = "world";
}
// 这段代码运行的结果是什么呢?
// 答案是:undefined
// 这段代码说明了两个问题,
// 第一,function作用域里的变量v遮盖了上层作用域变量v。
// 第二,在function作用域内,变量v的声明被提升了。所以最初的代码相当于:
// 在函数内部会形成单独的作用域
//
// var v = "hello";
// function test (){
// var v; //声明一个变量 声明提升,但是不会被赋值
// console.log(v);
// v = "world";
// }
运算符
- 算术运算符 +(加) ——(减) *(乘) /(除) %(取余数)
- 复合赋值运算符 -= += *= /= %=
- 自增自减运算符 -- ++
- 比较运算符 > < >= <= ==(比较的时候做类型转换) ===(全等于:值 数据类型都一样才算相等) !=
- 逻辑运算符 && 与 |或 !非
- 三元运算符
- 短路运算符
== 与 === 的区别
- == 会自动转化类型 1 == '1' // true
- === 不会自动转化类型 1 === '1' //false