• JavaScript之三


    1、block

    一般就是{}包括起来的代码块,注意的是,js没有块作用域,但是有函数作用域,全局作用域。

    2、var

    1
    var a = b = 1; 

    如:

    1
    2
    3
    4
    5
    6
    function () {
    var a = b = 1;
    }
    foo();
    console.log(typeof a); // "undefined"
    console.log(typeof b); // "number" b为全局变量

    3、try catch

    1
    2
    3
    4
    5
    6
    7
    try {
    throw "test";
    } catch(ex) {
    console.log(ex); // "test"
    } finally {
    console.log("finally"); // finally
    }

    4、function

    function fd() { // do something }; // 函数声明

    var fe = function { // do something }; // 函数表达式

    区别:函数声明可以在声明前调用,且无报错;而函数表达式不可以在声明前调用,有TypeError

    5、for…in

    1
    2
    3
    4
    5
    var p;
    var obj = {x:1, y:2};
    for(p in obj) {
    // 获取obj的key值
    }

    有几点需要注意:

    • 顺序不确定
    • enumerable为false时不显示
    • for…in 对象属性受到原型链的影响

    6、严格模式

    严格模式是一种特殊的执行模式,它修复了部分语言上的不足,提供更强的错误检查,并增强安全性

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    // 1.
    function func() {
    // ps:ie 不认该模式,会自动忽略严格模式
    // 方法func按照严格模式执行
    ;
    }大专栏  JavaScript之三 - 语法an>

    // 2.
    "use strict" // 按照严格模式来
    function func() {

    }

    严格模式:

    • 不允许使用with(SyntaxError);
    • 不允许给未声明的变量赋值(RefrenceError);
    • arguments变为参数的静态变量;
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    // 正常状态下
    !function(a) {
    // "use strict";
    arguments[0] = 100;
    console.log(a);
    }(1);
    // ps: 若有传参的话,则arguments[0]可以改变a的值,即a的值为100,
    // 若不传参,即!function(a){}();则无论是否有arguments的赋值,a都是为undefined
    // 严格模式:
    // 1) 值传递:传参则1,无传参则undefined
    // 2) 址传递:若在无传参的情况下赋值则会报错
    • 严格模式下删除形参会报错(1.configurable为true则报SyntaxError;2.configurable为false则报TypeError);
    • 对象字面量属性重复报错。var obj = {x:1, x:2}; // SyntaxError
    • 禁止八进制字面量 console.log(0123); //SyntaxError
    • eval, arguments变为关键字,不能作为变量、函数名,若违反则报SyntaxError
    • eval独立作用域
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    !function() {
    eval("val evalValue = 2;");
    console.log(typeof evalValue);//number
    }();

    !function() {
    ;
    eval("var evalValue = 2;");
    console.log(typeof evalValue);//undefined,原因是eval独立作用域
    }

    严格模式总结:

    1. 不允许使用with;
    2. 所有变量必须声明,赋值给未声明的变量报错,而不是隐式创建全局变量;
    3. eval中的代码不能创建eval所在的作用域变量、函数,而是为eval单独创建一个单独的作用域,并在eval返回时废弃;
    4. 函数中的特殊对象arguments是静态副本,而不像非严格模式那样,修改arguments或修改形参会相互影响;
    5. 删除configurable为false会报错,而不是选择忽略;
    6. 禁止八进制字面量;
    7. eval、arguments为关键字,不能作为变量名或函数名;
    8. 一般函数的调用(不是对象方法的调用,也不是用apply/call/bind等修改this指向),this指向null而不是全局对象;
    9. 若使用apply/call,当传入null或者undefined时,this指向null或undefined而不是全局对象;
    10. 试图修改不可写属性(writable=false),在不可扩展的对象上添加属性时报TypeError,而不是忽略;
    11. arguments.caller、arguments.callee被禁用
  • 相关阅读:
    [Python] 糗事百科文本数据的抓取
    [Python] 文件扫描
    [Python] 根据博客园用户名抓取其所有文章的标题及其链接
    ParagraphString
    IrregularGridCollectionView处理不定宽度的标签cell
    Java多线程与并发
    设计模式之代理模式
    javascript设置百分比保留两位小数。
    Java基础知识总结(异常机制、集合、JUC、IO)
    Java底层知识JVM、GC
  • 原文地址:https://www.cnblogs.com/lijianming180/p/12258728.html
Copyright © 2020-2023  润新知