js 数据类型的初步理解

1、js中的类型

字符串、数字、布尔、数组、对象、Null、Undefined

①基本数据类型

null、undefined、boolean、number、string

console.log(typeof 1);//number

    console.log(typeof "a");//string

    console.log(typeof null);//object

    console.log(typeof undefined);//undefined
    
    console.log(typeof true);//boolean

但是 typeof null  的返回值却是 object ,js中定义的null 是一个特殊的对象。更确切的说,null是一个空对象的指针,指向一个空对象。以此来和undefined区分开。

为了便于操作基本类型值,ECMAScript还提供了三个特殊的引用类型:Boolean、Number和String,标准库提供了构造函数来封装布尔值、数字和字符串作为对象。这些类型与其他引用类型相似,同时也具有与各自的基本包装类型相应的特殊行为。实际上,每当读取一个基本类型值时,后台就会创建一个对应的基本包装类型的对象,从而让我们能够调用一些方法来操作这些数据。

1
2
3
var s1 = "some text";
var s2 = s1.substring(2);
var s3 = new String("some text");

但是不同于原始的字符串,String对象是一个真正的对象。

1
2
typeof s1; //"string"
typeof s3; //"object"

这个例子中的变量s1包含一个字符串,字符串当然是基本类型值。而下一行调用了s1的substring()方法,并将返回的结果保存在s2中。我们知道,基本类型值不是对象,因此从逻辑上讲,它们不应该有方法(但是它们确实有方法)。其实,为了让我们实现这种直观的操作,后台已经自动完成了一系列的处理。当第二行代码访问s1时,访问过程处于一种读取模式,也就是从内存中读取这个字符串的值。而在读取模式中访问字符串时,后台都会自动完成下列处理:

(1)创建String类型的一个实例。

(2)在实例上调用指定方法。

(3)销毁这个实例。

特点是:

基本数据类型的值是不能影响其他值改变的。

//传递基本类型时,实参传入的是该元素的一个副本,该元素本身并不变化。
    var a = true;//boolean
    function arr(argument) {
        argument = false;
        console.log(argument);
    }
    arr(a);//false
    console.log(a);//true


    var b = 1;//number
    function num(argument){
        argument = argument-1;
        console.log(argument);
    }
    num(b);//0
    console.log(b);//1

    var c = undefined;
    function und(argument){
        argument = 1;
    }
    und(c);//1
    console.log(c);//undefined

    var d = "asdf";//string

    function str(argument){
        argument = argument.slice(1,2);
        console.log(argument);
    }
    str(d);//s
    console.log(d);//asdf

②引用类型。

引用类型通常叫做类(class)。

object、array。

引用类型的值存储在 内存中的栈区和堆区。

var  a = {}.  var b=a;

赋值给b的实质上堆区的一个指针,指向a对象的值。

所以,当a的值改变时,b的值也会随之改变。

var e = {};//obiect 
    var f = e;
    function obj(argument){
        argument.name = "onject";
        console.log(e.name);
    }
    obj(e);//onject
    console.log(e.name);//onject
    console.log(f.name);//onject
原文地址:https://www.cnblogs.com/RoadAspenBK/p/7698840.html