JavaScript - 语言提高

一、语言细节和技巧

    1、typeof、null 和 undefined

         typeof 操作符来检测变量的数据类型。

         null 表示 "什么都没有"的空值,undefined 表示没有设置值。

    2、数据类型转换

        (1) 通过使用 JavaScript 函数

        (2) 通过 JavaScript 自身自动转换

    3、正则表达式

        语法: /正则表达式主体/修饰符(可选)

            修饰符包括: i(大小写忽略)、g(全局匹配)、m(多行匹配)。

        常用方法: search() 和 replace()。

    4、提升(Hoisting)

        变量提升: 变量的声明将被提升到作用域的最顶部,注意只有声明会被提升而定义不会被提升。

        函数提升: 函数的声明/定义将被提升到作用域的顶部。

    5、严格模式(use strict)

        作用: 消除代码运行的一些不安全之处,保证代码运行的安全;提高编译器效率,增加运行速度;为未来新版本的Javascript做好铺垫。

        严格模式下新增关键字: implements、interface、let、package、private、protected、public、static、yield。

    6、JavaScript内置对象、属性和方法

Array Date eval function hasOwnProperty
Infinity isFinite isNaN isPrototypeOf length
Math NaN name Number Object
prototype String toString undefined valueOf

    7、this关键字

        在方法中,this 表示该方法所属的对象。

        如果单独使用,this 表示全局对象window。

        在函数中,this 表示全局对象window。(在函数中在严格模式下,this 是未定义的(undefined)。)

        在事件中,this 表示接收事件的元素。

    8、let和const

        ES2015(ES6) 新增加了两个重要的 JavaScript 关键字: let 和 const。

        let 声明的变量只在 let 命令所在的代码块内有效,它实际上增加了全局作用域和函数局部作用域外的代码块作用域。

        const 声明一个只读的常量,一旦声明,常量的值就不能改变。

    9、void

        void关键字指定要计算一个表达式但是不返回值。

        比如 javascript:void(0) 没有意义。

二、JavaScript函数

    1、函数定义

        使用函数声明: function myfunc(a, b) { return a*b; }

        使用函数表达式(匿名函数): var myfunc = function (a, b) { return a*b; }

        使用Function()构造函数: var myfunc = new Function("a", "b", "return a*b")

    2、函数参数

        显式参数(Parameters,即形参)、隐式参数(Arguments,即实参)。

        函数定义显式参数时没有指定数据类型。函数对隐式参数没有进行类型检测,对隐式参数的个数没有进行检测。

        ES5 中如果函数在调用时未提供隐式参数,参数会默认设置为:undefined 。

        ES6 支持函数带有默认参数。

        JavaScript 函数有个内置的对象 arguments 对象,它包含了函数调用的参数数组。

        JavaScript 隐式参数通过值来传递: 函数仅仅只是获取值,隐式参数的改变在函数外不可见。

    3、函数调用

        作为全局函数调用,此时this指向的是window对象。

        作为对象方法调用,此时this指向的是对象。

        使用构造器new来调用函数,将会生成一个新的函数对象,此时this不指向任何值。

        通过函数对象的call()和apply()两个方法来调用,它们都需要将对象作为第一个参数,此时的this指向的是第一个参数值。

    4、闭包

        函数可以访问局部变量,也可以访问全局变量;当函数与函数内嵌时,内嵌函数能访问外部函数的局部变量,也可以访问全局变量。

        在函数内部创建函数对象,该函数对象就可以访问外层函数的局部变量。

        将这个内部创建的函数对象返回,只有通过它才能操作外层函数的私有局部变量,这种机制就是闭包。

三、JavaScript对象

    1、对象基础

        JavaScript中没有类这个概念,相似的概念就是对象,对象也有继承的概念。(for...in遍历对象时将会遍历对象的属性)

        JavaScript 中的所有事物都是对象,对象具有属性和方法;所有的 JavaScript 对象都会从一个 prototype(原型对象)中继承属性和方法。

        创建对象有三种方法:

            (1) var obj = new Object(); obj.name = "java"; obj.color = "red";

            (2) var obj = {name: "java", color: "red"};

            (3) 对象构造器: function func(name, color) { this.name = name; this.color = color} | var obj = new func("java", "red");

        JavaScript对象手册: https://www.runoob.com/jsref

    2、Number对象

        属性: MAX_VALUE、MIN_VALUE、NEGATIVE_INFINITY、POSITIVE_INFINITY、NaN、prototype、constructor。

        方法: toExponential()、toFixed()、toPrecision()、toString()、valueOf()。

    3、String对象

        属性: length、prototype、constructor。

        方法: charAt()、charCodeAt()、concat()、fromCharCode()、indexOf()、lastIndexOf()、match()、replace()、

            search()、slice()、split()、substr()、substring()、toLowerCase()、toUpperCase()、valueOf()。

 

    4、Boolean对象

        在逻辑判断中,这些值将会认定为false: 0、-0、null、""、false、undefined、NaN。

        属性: prototype、constructor。

        方法: toString()、valueOf()。

    5、Array对象

        使用var x = new Array(); 来创建,不同数组下标所指向的可以是不同类型的对象。

        属性: length、prototype、constructor。

        方法: concat()、...、toString()、valueOf()。

    6、Date对象

        属性: prototype、constructor。

        方法: getDate()、...、toString()、valueOf()。

    7、Math对象

        属性: E、LN2、LN10、LOG2E、LOG10E、PI、SQRT1_2、SQRT2

        方法: abs(x)、...、sqrt(x)、tan(x)。

    8、RegExp对象

        属性: global、ignoreCase、lastIndex、multiline、source、constructor。

        方法: compile()、exec()、test()、toString()、search()、match()、replace()、split()。

猜你喜欢

转载自www.cnblogs.com/ringboow/p/11118553.html