ECMAScript5知识点总结

ES5的数据类型:

类型区别注释
Undefinedundefined基础数据类型
Booleantrue/false基础数据类型True/False不是Boolean值
String“somestring”基础数据类型
Number2,3,11…基础数据类型
Nullnull基础数据类型
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] 比较少用
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值