js复习一

1、break和continue区别

 break语句用于跳出代码块或循环;
 continue语句用于立即终止本轮循环,返回循环结构的头部,开始下一轮循环。

2、JavaScript共有六种数据类型,分别是

  • 数值(number)
  • 字符串(string)
  • 布尔值(boolean)
  • undefined
  • null
  • 对象(object)

    ES6又新增了第七种Symbol类型。

3、typeof 运算符可以返回一个值的数据类型。

typeof 可以用来检查一个没有声明的变量,而不报错。在实际编程中,这个特点通常用在判断语句。

//错误的写法
if(v){

}
//ReferenceError: v is not defined

//正确的写法
if(typeof v === 'undefined'){
    //
}

4、Base64转码

所谓Base64就是一种编码方法,可以将任意值转成0~9,A~Z,a-z,+和/这64个字符组成的可打印字符。使用它的主要目的,不是为了加密,而是为了不出现特殊字符,简化程序的处理。
JavaScript提供了两个Base64相关的方法。

  • btoa():任意值转为Base64编码
  • atob():Base64编码转为原来的值
var string = 'hello world'
btoa(string)     //"aGVsbG8gd29ybGQ="
atob('aGVsbG8gd29ybGQ=')   //"hello world"

5、闭包

理解闭包,首先必须理解变量作用域。javascript有两种作用域:全局作用域和
函数作用域。函数内部可以直接读取全局变量。
    var n = 999;
    function f1(){
        console.log(n);
    }
    f1() //999

上面代码中,函数f1可以读取全局变量n。
但是函数外部无法读取函数内部声明的变量。

        function f1(){
            var n = 999;  
        }
        console.log(n);  //Uncaught ReferenceError: n is not defined

如果出于种种原因,需要得到函数内部的局部变量。正常情况下,这是办不到的,只有通过变通方法才能实现。那就是在函数的内部,再定义一个函数。

    function f1(){
            var n = 999;  
            function f2(){
                console.log(n);
            }
            return f2;
        }
        var result = f1();  
        result();

闭包就是函数f2,即能够读取其他函数内部变量的函数。
闭包的最大用处有两个,一个是可以读取函数内部的变量,另一个就是让这些变量始终保持在内存中,即闭包可以使得它诞生环境一直存在。下面是一个例子,闭包使得内部变量记住上一次调用时的运算结果。

   function inc(start){
            return function(){
                return start++;
            }
        }
        var res = inc(5);
        console.log(res());  //5
        console.log(res());  //6
        console.log(res());  //7

注意:使用闭包内存消耗很大,所以不能滥用闭包。

6、异或运算符

异或运算(^)在两个二进制位不同时返回1,相同时返回0。
使用异或运算可以在不引入临时变量的前提下,互换两个变量的值。

        var num1 = 99;
        var num2 = 100;
        num1 ^= num2;
        num2 ^= num1;
        num1 ^= num2;

        num1  //100
        num2  //99

这是互换两个变量的值的最快方法。

7、JavaScript对象

7.1继承机制的设计思想就是,原型对象的所有的属性和方法,都能被实例对象共享。
    function Animal(name){
            this.name = name;
        }

        Animal.prototype.color = 'white';

        var cat1 = new Animal('大毛');
        var cat2 = new Animal('二毛');

        console.log(cat1.color);    
        console.log(cat2.color);

上面代码中,构造函数Animal的prototype属性,就是实例对象cat1和cat2的原型对象。原型对象上添加一个color属性,结果,实例对象都共享了该属性。如果实例对象自身就有某个属性或方法,它就不会再去原型对象寻找这个属性或方法。

7.2 Object对象的相关方法

  • Object.getPrototypeOf()
    Object.getPrototypeOf()返回参数对象的原型
  • Object.setPrototypeOf()
    Object.setPrototypeOf() 为参数对象设置原型,返回该参数对象。它接受两个参数,第一个是现有对象,第二个是原型对象。
        var a = {};
        var b = {x:1};

        Object.setPrototypeOf(a,b);
        console.log(Object.getPrototypeOf(a) === b);  //true
        console.log(a.x);   //1
  • Object.create()
    该方法接受一个对象作为参数,然后以它为原型,返回一个实例对象。该实例完全继承原型对象的属性。
// 原型对象
var A = {
  print: function () {
    console.log('hello');
  }
};

// 实例对象
var B = Object.create(A);

Object.getPrototypeOf(B) === A // true
B.print() // hello
B.print === A.print // true
  • Object.prototype.isPrototypeOf()

    实例对象的isPrototypeOf方法,用来判断该对象是否为参数对象的原型。

  • Object.getOwnPropertyNames()

Object.getOwnPropertyNames方法返回一个数组,成员是参数对象本身的所有属性的键名,不包含继承的属性键名。

Object.getOwnPropertyNames(Date)
// ["length", "name", "prototype", "now", "parse", "UTC"]

Object.getOwnPropertyNames方法返回所有键名,不管是否可以遍历。只获取那些可以遍历的属性,使用Object.keys方法

  • Object.prototype.hasOwnProperty()

对象实例的hasOwnProperty方法返回一个布尔值,用于判断某个属性定义在对象自身,还是定义在原型链上。

Date.hasOwnProperty('length') // true
Date.hasOwnProperty('toString') // false

猜你喜欢

转载自blog.csdn.net/zhang070514/article/details/82743773
今日推荐