JavaScript基础问答(一)
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