ECMAScript5知识点总结

来源:互联网 发布:农村淘宝合伙人的未来 编辑:程序博客网 时间:2024/06/10 22:40

ES5的数据类型:

类型 值 区别 注释 Undefined undefined 基础数据类型 Boolean true/false 基础数据类型 True/False不是Boolean值 String “somestring” 基础数据类型 Number 2,3,11… 基础数据类型 Null null 基础数据类型 Object [object Object] 引用数据类型

* 在ecmascript中函数即是对象,所以函数是属于对象数据类型。

undefined和null是特殊值,是用来描述“空值”。

    console.log(typeof null);    // object    /*至于这里为何返回object:从逻辑角度看,null代表一个空对象指针,所以会返回object。不建议深入探究。*/    console.log(undefined == null); // true    console.log(undefined === null); // false    /*实际上,undefined值是派生自null且都用来描述'空值',所以对他们进行相等性测试的是true。但是恒等(===)测试时,他们的类型不同所以会返回false*/

NaN(not a number)

NaN是一个特殊的值,称为不是一个数字的Number类型。

    conosle.log(NaN == NaN);   // false    // NaN和所有的值都不相等,包括自己。

字符串是不可变的

    var lang = 'java';    lang = lang + 'script';     // 字符串一旦创建就不能改变。第二行改变了lang的值,但是其实是改变了lang对象指向的内存区域。    // 可以理解为第二行代码改变了lang变量的指向。如下图

这里写图片描述

字符串和数字比较

对于数字和字符串操作符来说,加号运算符和比较运算符的行为是有所不同的。
加号运算符更偏爱字符串,如果其中一个操作数是字符串的话,则进行字符串链接操作。
比较运算符则更偏爱数字,当且仅当两个操作数都是字符串的时候,才会进行字符串的比较。

        console.log(1+3);  // 加法 3        console.log(1+'3');  // 字符串连接  '13'   1转换为'1'        console.log('1' + '3');  // 字符串连接  '13'        console.log(3 > 11);    // 数字的比较  fasle        console.log(3 > '11');  // 数字的比较  '11'转换为11  false        console.log('3' > '11');  // 字符串的比较  true

逻辑非运算符

        var str = 'hello';        console.log(!str);    // false        console.log(!!str);   // true        var kongStr = '';        console.log(!kongStr);  // true        console.log(!!kongStr);  // false        // 使用一个!逻辑非运算符的时候,是将值转化为布尔值,在取反。        // 使用两个!!逻辑非运算符的时候,是将值转为化布尔值取法在取反,相当于进行Boolean()进行处理

流程控制语句

对于if语句括号里面的表达式,会自动隐式调用Boolean()方法进行判断,将表达式的值转换成布尔值。

        if (条件表达式) {        } else if(条件表达式) {        } else {        }        // 在上述流程语句中,当条件表达式满足了其中一个条件的时候,便开始执行内部代码,而不会继续向下判断。详细见例子:        var result = 77;        // 第一种流程语句的写法结果为: 及格        if (result > 60) {            alert('及格');        } else if(result > 70) {            alert('中等');        } else if(result > 80) {            alert('良好')        }            // 第二种流程语句的写法结果为: 中等        if (result > 80) {            alert('良好');        } else if(result > 70) {            alert('中等');        } else if(result > 60) {            alert('及格')        }

封装函数动态累加(参数个数可变)

    function sum() {        var result = 0;        for (var i=0, len=arguments.length; i<len; i++) {            sum += arguments[i];        }        return result;    }

*ES5中的函数是没有重载功能,重载:几个相同的函数名,但是参数不同的函数。
*在ES5中,如果函数名相同,在后面声明的函数会覆盖前面声明的函数。


数组常用方法

        // 栈是一种数据后进先出的数据结构,栈方法: push()、pop()        var arr = [3,7,9,11,5];        console.log(arr.push(8));  // 6 返回数组长度,原数组改变[3,7,9,11,5,8]        console.log(arr.pop());    // 8 返回删除的元素 原数组为[3,7,9,11,5]        // 队列方法,是一种先进先出的数据结构。        var arr = [3,7,9,11,5];        console.log(arr.shift());   // 3 返回删除的元素,原数组为[7, 9, 11, 5]        console.log(arr.unshift(4));  // 5 返回数组长度,原数组为 [4, 7, 9, 11, 5]

sort()方法相关知识

    // sort()方法的默认排序在数字排序上是存在问题的,其默认排序顺序是根据字符串Unicode码点    var arr = [10, 1, 0, 5, 15];    console.log(arr.sort()); //  [0, 1, 10, 15, 5]    // 根据需求,常见的从小到大排序,或者从大到小排序    function compare(value1, value2) {       if (value1 < value2) {           return -1;       } else if(value1 > value2) {           return 1;       } else {           return 0;       }    }    var arr = [10, 1, 0, 5, 15];    console.log(arr.sort(compare));  // [0, 1, 5, 10, 15]    // 如果需要从大到小排序    console.log(arr.sort(compare).reverse()); // [15, 10, 5, 1, 0] 

数据内存存储

栈内存和堆内存

  1. 栈内存: 基本类型的值(同时也保存着对象的指针)
  2. 堆内存: 引用类型的值 => 对象

基本类型值: Undefined、Null、Boolean、Number、String类型值,占据固定的大小,存放在栈内存中,按值访问。
引用类性质: 对象。对象的大小是不固定的,因此保存在堆内存中。但引用的地址大小是固定的,因此保存在栈内存中。当查某引用类型的值时,先从栈中读取内存地址,通过内存地址找到堆中的值,称为按引用访问。注:引用类型的复制,是将引用的地址复制过去,指向同一个对象。
这里写图片描述

检测浏览器是否存在flash插件

    function hasPlugin(name) {        var name = name.toLowerCase();        for(var i = 0; i<navigator.plugins.length; i++) {            if (navigator.plugins[i].name.toLowerCase().indexOf(name) > -1) {                return true;              }        }    }    hasPlugin('flash');

获取节点

        document.getElementsByTagName(); // 返回对象集合,不是数组 [object HTMLCollection]        document.getElementsByClassName(); // [object HTMLCollection]        document.getElementById(); // [object HTMLDIVElement]        document.getElementsByName(); // [object NodeList] 比较少用
原创粉丝点击