JavaScript基础问答(一)

2017-02-22  本文已影响0人  Yura555
1:什么是引用类型?
在ECMA中引用类型是一种数据结构,用于将数据和功能组织在一起。
2:JavaScript中有哪几种引用类型?
  Object 、Array 、Date、RegExp、Function、基本包装类型、单体内置对象
3:请说出基本类型值有哪些?

Undefined、Null、Boolean、Number、String。这五种基本数据类型是按值访问的,因为可以操作保存在变量中实际的值而不是引用。

4:创建Object实例有哪些方法?
  //方法一:使用new操作符后跟Object构造函数
  var person = new Object();
  person.name = 'yura';
  person.age = 14;
  
 //方法二:使用对象字面量
  var person = {
      name:'yriua',
      age:13
  };

注意:在通过对象字面量定义对象时,实际上不会调用Object构造函数

5:访问对象属性有哪几种方法?
      //方法一:通过方括号语法
      //方括号优点主要是可以通过变量来访问属性
      //若属性名中包含会导致语法错误的字符,或者属性名使用关键字或保留字,使用方括号。
      console.log(person['name']);

      //方法二:通过点语法
      console.log(person.name;);
6:简单介绍一下Funtion类型。
      函数实际上是对象。每个函数都是Function类型的实例。而且都有其他引用类型一样具有属性和方法。由于函数式对象,所以函数名实际上是一个指向函数对象的指针,不会与某个函数绑定。
7:什么是函数声明,声明是函数表达式。函数表达式和函数声明有什么不同?
    //函数声明
    function sum (){
      //.........
    }

  //函数表达式
  var sum = new Function ('num1','num2,"return num1+num2");

函数声明和函数表达式区别:解析器会率先读取函数声明,并使其在执行之前就可以访问。至于函数表达式,必须等到解析器执行到他所在的代码行,才会真正被解析。

注意!!函数是对象,函数名是指针

8:简介arguments?

arguments是函数内部的对象。他是一个类似数组的对象,包含着传入函数中的所有参数。
argument有一个callee属性,该属性是一个指针,指向拥有这个arguments对象的函数
如:

//这段代码函数的执行与函数名factorial紧紧耦合,
function factorial(num){
  if(num<=1){
    return 1;
  }else{
    return num*factorial(num-1);
  }
}

//为消除这种耦合现象。我们可以使用auguments.callee
function factorial(num){
  if(num<=1){
    return 1;
  }else{
    return num*argumens.callee(num-1);
  }
}
9:this是什么鬼?

this是函数内部的一个特殊的对象。this引用的是函数根据以执行的环境对象。(如在网页的全局对象中调用函数时,this对象引用的就是window)

10:caller是什么?

caller是函数的一个对象的属性。这个属性中保存着调用当前函数的函数引用。

function outer(){
    inner();
}

function inner(){
alert(inner.caller);
}

outer();  \\显示outer函数源代码
11:apply和call有什么区别。他们的作用是什么?

每个函数都包含两个非继承而来的方法。这个方法的用途

apply():接受两个参数,一个是在其中运行函数的作用域,另一个是参数数组
call():第一个参数是this,剩余的所有值都是直接传递给函数。在使用call()时,传递给函数的参数必须逐个列举出来。

function sum(num1,num2){
  return num1+num2;
}

function callSum(num1,num2){
  return sum.apply(this,argumens); //传入arguments对象
}
function callSum2(num1,num2){
  return sum.apply(this,[num1,num2]);
}
function callSum3(num1,num2){
  return sum.call(this,num1,num2);
}

注意:严格模式下,未指定环境对象而调用函数,则this值不会转型为window。

apply和call可以扩充函数的作用域。

window.color = 'red';
var o = {color:'bule'};
function sayColor(){
  alert(this.color);
}
sayColor(); //red
sayColor.call(this); //red
sayColor.call(window); //red
sayColor.call(o);//blue
12:什么是基本包装类型?

为了便于操作基本类型值,ECMAScript还提供了3个特殊的类型:Boolean、Number、String

13:引用类型和基本包装类型有什么区别?

生存周期不同。使用new操作符创建的引用类型的实例,在执行流离开当前作用域之前都一直保存在内存中。而自动创建的基本包装类型的对象,则只存在于代码执行的瞬间,然后立即被销毁。这意味我们不能再运行时为基本类型值添加属性和方法。

14:什么是单体内置对象?

内置对象是由ECMAScript实现提供的、不依赖于宿主环境的对象。这些对象在ECMAScript程序执行之前就已经存在了。意思就是说开发人员不必显示的实例化内置对象。因为他们已经实例化了。如:Object 、Array、String。
单体内置对象:Global和Math

上一篇下一篇

猜你喜欢

热点阅读