# js 基础练习
* 写出四种js引入方式并举例
* 下面两段代码，说明js文件的加载顺序并解释原因
    demo1:

    ```
    <script async src="js/vendor/jquery.js"></script>
    <script async src="js/script2.js"></script>
    <script async src="js/script3.js"></script>

    ```

    demo2
    ```
     <script defer src="js/vendor/jquery.js"></script>
    <script defer src="js/script2.js"></script>
    <script defer src="js/script3.js"></script>

    ```
* 如果浏览器不支持javascript的语法需要在页面上提示您的浏览器不支持javascript 运行  如何实现



* 列举几种js 交互方式

* js的组成

* JavaScript 如何与 HTML 和 CSS 协同工作

* 在外部文件中放置js脚本有什么优势



变量和常量
* 如何交换两个变量的值
* 字面量和变量的关系及区别
* 变量命名规则

* 下面代码执行结果为  原因是
  ```
    var obj1 = new Object(); 
    var obj2 = obj1; 
    obj1.name = "Nicholas"; 
    alert(obj2.name);

  ```
*  用一行语句声明5个变量 其中值包有一个只声明不赋值 其他分别为null 数值 字符串 布尔
数据类型

* 数据类型可以分为哪几类  有什么区别

* 如何实现功能 当浏览器不支持javascript脚本的时候  给用户在页面上提示“您的浏览器不支持javascript 脚本，请尽快升级浏览器”
* typeof 检测数据类型的返回值都有什么  分别代表什么意思
* 类型转换相关
   1. 输入两个数字，点求和弹出两个数字相加的结果。 
      1. 输入框的默认value进行相加，结果是进行了字符串相加，而非数字相加。
      2. 将value的值进行parseInt，之后再相加，就是数字相加的结果了。
      如果输入12+abc，会是什么结果？ 你得到了什么结论
      3.isNaN，检测输入框的内容是不是NaN。true为真，false为假。
      4.写出下面的执行结果
            1 + '1' 
            true + 0
            {}+[]
            4 + {} 
            4 + [1] 
            'a' + + 'b'
            console.log ( [] == 0 )
            console.log ( ! [] == 0 )
            console.log ( [] == ! [] )
            console.log ( [] == [] )
            console.log({} == !{})
            console.log({} == {})

        1. 定义一个变量存储数据1234，分别输出个位，十位，百位，千位数字
        2. 输入两个数字，相减四舍五入（.toFixed() 把保留几位小数写在括号里）
        3. 从弹框中输入一个字符，判断这个字符是否是英文字母，数字，汉字（4e00-9fa5）
        4. 下面代码的输出结果
            console.log(10 + " cats");
            console.log(10 * " cats");
            Boolean([])
            console.log(10 + "2");
            console.log(10 - "2");
            Number("3")
            console.log(10 / "2");
            console.log(10 * "2");
            String(false)
            console.log(10 * " 2");
            console.log("10" * "2");
            console.log(Object(undefined));
            console.log(Object(null));

        5. 下面代码的执行结果
        var str = "abc";
        str[0] = "d"; 

        console.log(str[1]="e"); 
        console.log(str[0]); 
        console.log(str); 
        var num = [1,2,3];
        num[0] = "a";

        console.log(num);

        1.  下面代码的执行结果
            var obj1 = {age: 22};
            var obj2 = obj1; 

            console.log(obj1 === obj2);
            obj2.age = 18;
            console.log(obj1 === obj2); 

        2.  解释10，11结果出现的原因 并归纳基本数据类型和引用数据类型的区别

        3.  下面代码的输出结果
        var obj1 = {age: 22};
        var obj2 = obj1; 
        console.log(obj1 === obj2); 
        obj2.age = 18; 
        console.log(obj1 === obj2); 
        console.log("1" instanceof String);
        console.log(("1").constructor === String);
        console.log((1).constructor === Number);
        console.log((true).constructor === Boolean);
        console.log(([]).constructor === Array);
        console.log((function() {}).constructor === Function);
        console.log(({}).constructor === Object);
        console.log(1 instanceof Number);
        console.log(true instanceof Boolean);
        console.log([] instanceof Array);
        console.log(function(){} instanceof Function);
        console.log({} instanceof Object);
        var test = Object.prototype.toString;
        console.log(test.call("str"));
        console.log(test.call(1));
        console.log(test.call(true));
        console.log(test.call(null));
        console.log(test.call(undefined));
        console.log(test.call([]));
        console.log(test.call(function() {}));
        console.log(test.call({}));


