js语法注意点

  1. 如果省略var关键字就声明关键字,那么该变量会被定义为全局变量(不推荐)。
    function f() {
        num = 3;
    }
    f();
    console.log(num) //结果为3
  1. undefined 存在的意义是为了正式区分空对象指针(null)和未经初始化的变量。
  2. 利用Boolean()方法可将各种类型的值转化为布尔值。其中需要注意的,空字符串为false,Number类型任何非零数字值,包括无穷大,均为true;0和NaN(Not a Number)均为false。
  3. NaN任何涉及到该值的操作,如NaN/10都会返回NaN。它不等于任何值,包括其本身。
 alert(NaN === NaN) //输出结果为 false
  1. isNaN方法可判断一个值是否是NaN,如果参数是字符串,会自动转换为数值;如果是布尔值,则true->1,false->0;
    console.log(isNaN(NaN))     //true
    console.log(isNaN(10))      //false
    console.log(isNaN("10"))    //false
    console.log(isNaN("blue"))  //true
    console.log(isNaN(true))    //false
  1. String类型一旦初始化就无法更改其值。下面代码的实现过程其实是:初始化str,再为str创建一个新的副本,再将副本赋值。
    var str = 'zed';
    str = 'zed1'
    console.log(str) //zed1
  1. 逻辑与&&为短路操作符,即若左边条件为假,不会判定右边,不论真假,连看都不看一眼。
  2. =====,推荐使用前者。==在判定之前会把两者转换为类型相近。
    console.log(1 == '1') //true
    console.log(1 === '1')//false
    console.log(1 == true)//true
    console.log(1 === true)//false
    console.log(null == undefined)//true
    console.log(null === undefined)//false
  1. switch语句中,如果有意不写break,最好给出注释。
    var n = 2;
    switch (n) {
        case 1:
        case 2:
            //合并两种情形
            console.log(1 + ' or ' + 2);
            break;
        case 3:
            console.log(3);
            break;
        default:
            console.log(101);
            break;
    }
  1. 与其他很多语言不同的是,switch语句可以用任何数据类型,甚至是表达式(那些语言一般只能用数值型)。
    var con = 'hhzed';

    switch (con) {
        case "hahah":
            console.log('hhh');
            break;
        case 'hh' + 'zed':
            console.log(1);
            break;
        default:
            console.log(con);
            break;
    }
  1. 函数的参数列表,定义和调用的时候,参数不必需一一对应,因为传入的参数列表是一个数组,第一个,第二个参数为arguments[0] ,arguments[1],命名的参数只是便于操作。
  2. ES中函数没有签名,故也无法像其他语言实现重载。
  3. ES中所有函数的参数均为按值传递,引用类型变量也是,就是把地址作为值传给函数内部的局部变量。下面的代码证明了此点:
 var obj = {
        name: 'zed'
    }

    function f(object) {
        object.name = 'xxxx';
    }

    f(obj);
    console.log(obj.name) // xxxx 
    var obj = {
        name: 'zed'
    }

    function f(object) {
        object.name = 'xxxx';
        object = {
            name: 'yyyyy'
        }
    }

    f(obj);
    console.log(obj.name) 
    //xxxx ,如果作为引用传给函数,那么结果应为yyyyy,故传递的是地址值
  1. 作用域链:保证对执行环境有权访问的所有变量和函数的有序访问。
  2. 垃圾收集:标记清除,引用计数(已废弃)
  3. 基本数据类型存放在栈中,引用类型变量存放在堆中。

未完待续…

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值