zoukankan      html  css  js  c++  java
  • JavaScript 常见基础问题一

    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事件不能够即时被触发。
  • 相关阅读:
    如何将 Web 框架迁移到 Serverless
    Serverless + CVM 实战
    Serverless Registry 设计解读与实战
    使用 ServerLess 实现云原生
    腾讯云 Serverless 技术在「老司机汽车 app」的落地实践
    LeetCode 树 103. 二叉树的锯齿形层次遍历(双端队列 DFS的空间复杂度)
    LeetCode 树 116. 填充每个节点的下一个右侧节点指针(层序遍历 分层)
    LeetCode 树 230. 二叉搜索树中第K小的元素(二叉搜索树 中序遍历 剪枝)
    LeetCode 树 236. 二叉树的最近公共祖先(递归 深度优先搜索)
    LeetCode 树 102. 二叉树的层序遍历(广度优先搜索 深度优先搜索 队列)
  • 原文地址:https://www.cnblogs.com/huangjianhuakarl/p/3141805.html
Copyright © 2011-2022 走看看