博客园  :: 首页  :: 新随笔  :: 联系 :: 管理

JavaScript 常见基础问题一

Posted on 2012-04-04 23:34  匆匆  阅读(509)  评论(0编辑  收藏  举报

1、JavaScript:window.onload操作

//JavaScript:window.onload操作 
function first() { 
    alert('first');
}
function second() {
    alert('second');
}
window.onload = first;
window.onload = second;
//只会执行第二个window.onload;

//不过可以通过以下方法来进行改进: 
window.onload = function(){
    first(); 
    second();
} 

2、判断字符串是否是这样组成的,第一个必须是字母,后面可以是字母、数字、下划线,总长度为5-20

str = "hello";
var reg = /^[a-zA-Z][a-zA-Z_0-9]{4,19}$/;
console.log(reg.test(str));

3、写出几种this的应用

function Car(color,brand){
    this.color = color;
    this.brand = brand;
}

<input type="button" onclick="show(this);" value="点击一下" />

var btn = document.getElementById("Example");
btn.addEventListener("click", function () {
    console.log(this.innerHTML);
}, false);

4、typeof用法举例

var a; //undefined
var a = -1.9; //number
var a = "-1.9"; //string
var a = function () { }; //function
var a = true; //boolean
var a = new Array(); //object
var a = {}; //object
var a = null; //object
可以使用 typeof 来获取一个变量是否存在,如 if(typeof a!="undefined"){alert("ok")},而不要去使用 if(a) 因为如果 a 不存在(未声明)则会出错,对于 Array,Null 等特殊对象使用 typeof 一律返回 object,这正是 typeof 的局限性。

5、函数参数

function add(a,b,c,d){
    console.log(arguments.length); 
    return a+b+c+d;
}
console.log(add.length); 
console.log(add(1,1)); 
console.log(add(1,1,1,1,1)); 
以上代码控制台分别输出:4,2,NaN,5,4
Arguments对象的length属性是实际传递给函数的参数个数,可以比申明的参数个数多,也可以比申明的参数个数少。
Function对象的length属性是在定义函数时声明已命名的参数的个数(a,b,c,d)。

6、JavaScript是一种基于对象的语言,JavaScript中可以使用哪几种对象

Javascript对象总的来分可以分为三大类:
①内部对象
Js中的内部对象包括Array、Boolean、Date、Function、Global、Math、Number、Object、RegExp、String以及各种错误类对象,包括Error、EvalError、RangeError、ReferenceError、SyntaxError和TypeError。
其中Global和Math这两个对象又被称为“内置对象”,这两个对象在脚本程序初始化时被创建,不必实例化这两个对象。
②宿主对象
宿主对象就是执行JS脚本的环境提供的对象。对于嵌入到网页中的JS来说,其宿主对象就是浏览器提供的对象,所以又称为浏览器对象,如IE、Firefox等浏览器提供的对象。不同的浏览器提供的宿主对象可能不同,即使提供的对象相同,其实现方式也大相径庭!这会带来浏览器兼容问题,增加开发难度。
浏览器对象有很多,如Window和Document等等。
③自定义对象
顾名思义,就是开发人员自己定义的对象。JS允许使用自定义对象,使JS应用及功能得到扩充

7、闭包如何理解?举个栗子?

简单地说:当一个函数返回它内部定义的一个函数时,就产生了一个闭包。
function closure() {
    var count = 0;
    var get = function () {
        count++;
        return count;
    };
    return get;
}
var a = closure();
var b = closure();
console.log(a()); //1
console.log(a()); //2
console.log(b()); //1
以上代码生成两个闭包实例,在内存中生成了相互独立的副本,它们内部引用的count变量分别属于各自的运行环境。

8、解释call, apply的用法?

1)apply
语法:function.apply(thisobj, args)
参数:thisobj (调用function的对象,在函数主体中,thisobj是关键字this的值)
args (一个数组,它的元素是要传递给函数function的参数值)
描述:apply()将指定的函数function作为对象thisobj的方法来调用,传递给它的是存放在数组args中的参数,返回的是调用function的返回值。在函数体内,关键字this引用thisobj对象。
参数args必须是数组或Arguments对象。如果想单独指定传递给函数的参数,而不是指定数组元素,则使用Function.call()方法。
2)call
obj1.method1.call(obj2,argument1,argument2)
如上,call的作用就是把obj1的方法放到obj2上使用,后面的argument1..这些做为参数传入.
两个方法用法一样,区别是参数不同。当参数明确时可用call, 当参数不明确时可用apply给合arguments。

案例用call、apply可以实现多继承:
function Add() { this.showAdd = function (a, b) { alert(a + b); } } function Sub() { this.showSub = function (a, b) { alert(a - b); } } function Example() { Add.call(this); Sub.apply(this); } var e = new Example(1, 2); e.showAdd(1, 1); //2 e.showSub(1, 1); //0

9、跨域解决方案?

a、document.domain+iframe的设置
b、动态创建script
c、利用iframe和location.hash
d、利用flash

10、POST和GET的区别?

a. 根据HTTP规范,GET用于从服务器上获取信息,POST是向服务器传送数据,表示可能修改变服务器上的资源的请求。
b. GET是把参数数据队列加到提交表单的ACTION属性所指的URL中,值和表单内各个字段一一对应,在URL中可以看到。POST是通过HTTP POST机制,将表单内各个字段与其内容放置在HTML   HEADER内一起传送到ACTION属性所指的URL地址。用户看不到这个过程。
c. 对于GET方式,服务器端用Request.QueryString获取变量的值,对于POST方式,服务器端用Request.Form获取提交的数据。
d. GET传送的数据量较小,不能大于2KB。POST传送的数据量较大,一般被默认为不受限制。但理论上,IIS4中最大量为80KB,IIS5中为100KB。
e. GET安全性非常低,POST安全性较高。但是执行效率却比POST方法好。

11、浏览器渲染操作的顺序?

(1) 解析HTML结构。
(2) 加载外部脚本和样式表文件。
(3) 解析并执行脚本代码。
(4) 构造HTML DOM模型。
(5) 加载图片等外部文件。
(6) 页面加载完毕。
load事件必须等到网页中所有内容全部加载完毕之后才被执行。如果一个页面中包含了大容量的多媒体文件,则就会出现这种情况:网页文档已经呈现出来,但由于网页数据还没有完全加载完毕,导致load事件不能够即时被触发。