zoukankan      html  css  js  c++  java
  • Javascript标准参考教程学习记录

    教程:http://javascript.ruanyifeng.com/

    基本语法 - 函数

    1、函数名的提升

    JavaScript引擎将函数名视同变量名,采用function命令声明函数时,整个函数会被提升到代码头部。下面的代码不会报错。

    f();
    function f(){}

    但是,采用赋值语句定义函数,JavaScript就会报错。

    f();
    var f = function (){}; // TypeError: undefined is not a function

    如果同时采用function命令和赋值语句声明同一个函数,最后总是采用赋值语句的定义。

    2、参数传递方式

    JavaScript的函数参数传递方式是传值传递(passes by value),但是对于复合类型的变量来说,属性值是按址传递(pass by reference),也就是说,属性值是通过地址读取的。所以在函数体内修改复合类型变量的属性值,会影响到函数外部。 

    简单地理解,函数体内整体修改传递进来的复合类型变量,如数组、对象,是不会影响到函数外部,但修改属性值就会到函数外部。

    var o = [1,2,3];
    
    function f1(o){
        o = [2,3,4];
    }
    f1(o);
    console.log(o); // [1,2,3]
    
    function f2(o){
        o[2] = 4;
    }
    f2(o);
    console.log(o); // [1,2,4]

    3、eval命令

    eval没有自己的作用域,都在当前作用域内执行。

    var a = 1;
    eval('a = 2');

    ECMAScript 5将eval的使用分成两种情况,像上面这样的调用,就叫做“直接使用”。另一种情况是,eval不是直接调用,而是“间接调用”,此时eval的作用域总是全局作用域。

    var a = 1;
    
    function f(){
        var a = 2;
        var e = eval;
        e('console.log(a)');
    }
    
    f(); // 1

    基本语法 - 对象

    1、检查变量是否声明

    if(window.a) {...} // 不报错
    if(window['a']) {...} // 不报错

    这二种写法有漏洞,如果a属性是一个空字符串(或其他对应的布尔值为false的情况),则无法起到检查变量是否声明的作用。正确的写法是使用in运算符。

    if('a' in window) {...}

    2、查看所有属性

    查看一个对象本身的所有属性,可以使用Object.keys方法。

    var o = {
      key1: 1,
      key2: 2
    };
    
    Object.keys(o);  // ["key1", "key2"]

    3、with语句

    with语句少数有用场合之一,就是替换模板变量。

    var str = 'Hello <%= name %>!';

    上面代码是一个模板字符串,为了替换其中的变量name,可以先将其分解成三部分'Hello ', name, '!',然后进行模板变量替换。

    var o = {
      name: 'Alice'
    };
    
    var p = [];
    var tmpl = '';
    
    with(o){
      p.push('Hello ', name, '!');
    };
    
    p.join('') // "Hello Alice!"

    上面代码中,with区块内部,模板变量name可以被对象o的属性替换,而p依然是全局变量。事实上,这就是很多模板引擎的实现原理。

    标准库 - Date对象

    1、Date.now()

    now方法返回当前距离1970年1月1日 00:00:00 UTC的毫秒数(Unix时间戳乘以1000)。

    如果需要更精确的时间,可以使用window.performance.now()。它提供页面加载到命令运行时的已经过去的时间,单位是浮点数形式的毫秒。

    面向对象编程 - 概述

    1、apply方法

    将数组的空元素变为undefined

    Array.apply(null, ["a",,"b"])
    // [ 'a', undefined, 'b' ]

    空元素与undefined的差别在于,数组的foreach方法会跳过空元素,但是不会跳过undefined。因此,遍历内部元素的时候,会得到不同的结果。

  • 相关阅读:
    unity基础开发----Unity获取PC,Ios系统的mac地址等信息
    Web UI设计师需要了解的用栅格化系统指导网页设计
    设计网页,常见的宽度是多少像素?
    C#常用类库简介(二)
    将本地代码上传到gitLab
    删除git 分支
    git 新建分支
    将子分支代码merge到主分支master分支
    dev分支代码覆盖master分支代码
    使用flex的同时设置超出喜爱是省略号,
  • 原文地址:https://www.cnblogs.com/liuzhenwei/p/4444004.html
Copyright © 2011-2022 走看看