JS-数据类型

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 全局作用域 (全局变量)

  1. 最外层函数和在最外层函数外面定义的变量拥有全局作用域。
  2. 函数本身也是一个特殊的变量,其名字就是函数名
  3. 未定义直接赋值的变量自动声明为拥有全局作用域
  4. 所有window对象的属性拥有全局作用域,window对象的内置属性都拥有全局作用域.eg:window.location
  5. 执行环境类似一个表格:第一行放置全局变量,第二行:放置局部变量
  6. 变量搜索机制:先搜索局部变量,如果没有找到,就会搜索全局变量
//函数执行
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
posted @ 2017-04-05 23:01  lfy  阅读(149)  评论(0)    收藏  举报