js复习

js基础类型和复杂类型

2019-06-21  本文已影响0人  椋椋夜色

<!DOCTYPE html>
<html lang="zh-CN">

<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title> js基础类型和复杂类型 </title>
JavaScript 数据类型 : https://www.runoob.com/js/js-datatypes.html
</head>

<body>
    <p>
        JavaScript中的数据类型有两种: <br>
        简单数据类型(基本类型):字符串(String)、数字(Number)、布尔(Boolean)、对空(Null)、未定义(Undefined)、Symbol(ES6新增)。<br>
        布尔(逻辑)只能有两个值:true 或 false。<br>
        Undefined (未定义) 这个值表示变量不含有值。可以通过将变量的值设置为 null 来清空变量。person=null; <br>
        Symbol 是 ES6 引入了一种新的原始数据类型,表示独一无二的值<br>
        复杂数据类型(引用数据类型):对象(Object)、数组(Array)、函数(Function)。<br>
    </p>
    <a href="https://www.runoob.com/js/js-datatypes.html">JavaScript 数据类型</a>
    <p>
        (扩展) <br>
        1.在内存中的存储方式 <br>

        简单数据类型把数据名和值直接存储在栈当中<br>

        复杂数据类型在栈中存储数据名和一个堆的地址,在堆中存储属性及值。访问时先从栈获取地址,再到堆中拿出相应的值。<br>

        2.不同数据类型作为参数时 函数内部对参数的修改是否改变外部变量的值<br>

        (1)简单数据类型作为参数时,函数内部对参数值的修改不会改变外部变量的值<br>

        function a(s){//定义以s为参数的函数,返回s的值
            s=100;
            return s;
            }
            var y=1;
            a(y);//y作为参数调用函数a
            console.log(y);//y还是为1 <br>

        结果还是1因为把y的值给s时是简单的复制了一份,y和s可以单独操作不相互影响 <br>

        (2)复杂数据类型作为参数时,函数内部对参数值的修改会改变外部变量的值 <br>

        因为复杂数据类型赋值是把栈中对象的地址赋给变量,函数内外两个变量指向同一个对象,所以只要对象的属性值改变,两个变量值都会改变<br>

        function student(age,name,agrde){
            this.age=age;
            this.name=name;
            this.score=agrde;
            } <br>

            var s1=new student(18,"liang",2);//创建一个student对象<br>
        console.log(s1); // student {age: 18, name: "liang", score: 2} <br>

            function a(s){
            s.name="xxx";
            }
            a(s1)//把s1赋给s
            console.log(s1.name);//输出xxx <br>

        所以要弄懂js中简单数据类型和复杂数据类型的区别,关键还要搞懂两个在内存中的存储过程。<br>
        基本类型存储的是值,复杂类型存储的是地址(指针)。<br>
        当你创建了一个复杂类型的时候,计算机会在内存中帮我们开辟一个空间来存放值,但是我们需要找到这个空间,这个空间会拥有一个地址(指针)。<br>
        当我们将变量赋值给另外一个变量时,复制的是原本变量的地址(指针),当我们进行数据修改的时候,就会修改存放在地址(指针) 上的值。<br>

    </p>

    <script>
        var x; // x 为 undefined
        console.log(x); // undefined
        var x = 5; // 现在 x 为数字
        console.log(x); // 5
        var x = "liang"; // 现在 x 为字符串
        console.log(x); // liang

        // 声明新变量时, 可以使用关键词 "new" 来声明其类型:

        var carname = new String; // 声明一个字符串类型
        var x = new Number; // 声明一个数字类型
        var y = new Boolean; // 声明一个布尔类型
        var cars = new Array; // 声明一个数组类型
        var person = new Object; // 声明一个对象类型


        // 基本数据类型(扩展)
        function a(s) { //定义以s为参数的函数,返回s的值
            s = 100;
            return s;
        }
        var y = 1;
        a(y); //y作为参数调用函数a
        console.log(y); //y还是为 1

        // 复杂数据类型
        function student(age, name, agrde) {
            this.age = age;
            this.name = name;
            this.score = agrde;
        }

        var s1 = new student(18, "liang", 2); //创建一个student对象
        console.log(s1); // student {age: 18, name: "liang", score: 2}

        function a(s) {
            s.name = "椋椋夜色";
        }
        a(s1) //把s1赋给s
        console.log(s1.name); //输出 : 椋椋夜色
    </script>
</body>

</html>
上一篇下一篇

猜你喜欢

热点阅读