JavaScript变量基础-基本类型,引用类型,逻辑运算,传值传址

浏览器内核

IE: trident
Chrome: blink
FireFox: Gecko
Opera: Presto
Safari: webkit

外部引入JS
script标签

 

JS的基本变量类型

原始类型: 它的赋值仅仅是改变它的值而非地址,例如 a=1; b=a; a=2; 后,b的值不会变成2而依然是1

  • 数字类型 Number,包括浮点数和整数
  • 字符串 var st = "String";
  • Boolean,true: 1, false: 0
  • undefined: 已经声明但是没有赋值的变量
  • null: 空值,一般用于占位,本质是一个Object


引用类型:引用类型的赋值是地址引用,即var A = B; B.add(1); 后,A的值会随B变化

  • Array数组 var arr = [1,2,"s",true];
  • Object = {}
  • function
  • Symbol(ES6加入,表示独一无二的值)

 

 

var 声明变量会导致变量提升,即出现先引用后声明的现象
ES6 提供let和const关键字来声明变量避免变量提升

 

var的缺点

var声明的变量可以被重复声明,会导致变量提升,污染全局变量。尽量使用let或者const去替代var。
let, const声明的变量在所在作用域仅能声明一次,且不会影响到外面的作用域,但是作用域内的作用块可以读取,使用它们声明的变量。

 

逻辑运算

    let a = 10,
        b = 5;
    /* 加减乘除和其它语言一样 */
    let c = a%b;
    let x = 0;
    let y = b + x++;

    for(let i=0; i<10; ++i){
        document.write(i);
    }
    for(let i=0; i<10; i++){
        document.write(i);
    }

    /*逻辑运算*/
    let t = 1, y =2;
    console(t==t, t<y, t>y, t==t&&t>y,t==t||t>y);

    let i=1, j="1";
    /* == 相等,不同类型会转换为同一类型比较,称为隐式转换
    === 为全等,数据类型不同则直接返回false
    */
    console(i==j,i===j);

    let span = document.querySelector("#msg");
    document.querySelector('[name="age"]')
    .addEventListener("keyup", function(){
        span.innerHTML = this.value >= 90 ? "年纪太大" : "";
    })

    /*短路运算符: 1||0或者0||1在检查到1的时候直接返回true*/
    console.log(1==true, 0==false, 1 || 0, 0 || 1);
    let sex = prompt("输入性别") || "未知";

    /*Switch语法*/
    let s = 10
    switch(s) {
        case 1:
            console.log('a');
            break;
        case false:
            console.log('b');
            break;
        default:
            console.log('10');
            break;
    }

传值与传址

//传值,直接复制a的值并且赋值给b
    let a = 1;
    let b = a;
    console.log(a,b);
    a += 1;
    console.log(a,b);
    b += 10;
    console.log(a,b);

    //传址:一般引用对象比较大,传值很占内存,因此会直接引用地址
    //e,f因此公用同一个对象和地址
    let e = {id: 100};
    let f = e;
    f.name = 101;
    console.log(e);
    e.name = 103;
    console.log(f);

 隐式转换

    /*隐式转换*/
    console.log(typeof(winssss)); // 字符串"undefined", 只有typeof+未声名变量不报错
    console.log(typeof(null)); // 字符串"Object"
    console.log(10+"10"*2==30); // true
    console.log(!!" " + !!"" + !!false || "hehe"); // true

 

posted @ 2020-11-24 19:27  SvenWayne  阅读(135)  评论(0)    收藏  举报