JavaScript | 数据类型

 

 

值类型(基本类型):字符串(String)、数字(Number)、布尔(Boolean)、对空(Null)、未定义(Undefined)、Symbol。 

引用数据类型:对象(Object)、数组(Array)、函数(Function)。

 

注:Symbol 是 ES6 引入了一种新的原始数据类型,表示独一无二的值。

 

数据类型包括:基本数据类型和引用数据类型

  基本数据类型指的是简单的数据段, 不可变

  引用数据类型指的是有多个值构成的对象,可变

 

当我们把变量赋值给一个变量时,解析器首先要确认的就是这个值是基本类型值还是引用类型值。

 

 

一、基础数据类型 

1. number 数字

JavaScript 只有一种数字类型。数字可以带小数点,也可以不带:

var x1=34.00;      //使用小数点来写
var x2=34;         //不使用小数点来写

极大或极小的数字可以通过科学(指数)计数法来书写:

var y=123e5;      // 12300000
var z=123e-5;     // 0.00123

实例

<!DOCTYPE html>
<html>
<head> 
<meta charset="utf-8"> 
</head>
<body>

<script>
var x1=34.00;
var x2=34;
var y=123e5;
var z=123e-5;
document.write(x1 + "<br>")
document.write(x2 + "<br>")
document.write(y + "<br>")
document.write(z + "<br>")
</script>

</body>
</html>

 

var a = 123;
console.log(typeof a);         //typeof 检查当前变量是什么数据类型

var a1 = 5/0;                //特殊情况
console.log(a1);
console.log(typeof a1);        //Infinity 无限大. number类型

 

2. string 字符串 

字符串是存储字符(比如 "Bill Gates")的变量。 

字符串可以是引号中的任意文本。您可以使用单引号或双引号:

var carname="Volvo XC60";
var carname='Volvo XC60';

您可以在字符串中使用引号,只要不匹配包围字符串的引号即可:

var answer="It's alright";
var answer="He is called 'Johnny'";
var answer='He is called "Johnny"';

 

var str  = '123'
console.log(typeof str);

网页查看console

 

 

3. boolean 布尔值

布尔(逻辑)只能有两个值:true 或 false。 

var x=true;
var y=false;

布尔常用在条件测试中。

var b1 = false;   //注意是小写的,和python里面的大写不一样
console.log(typeof b1);

 网页查看console

 

4. null

var c1 = null;       //空对象. object
console.log(c1);

网页查看console

 

可以通过将变量的值设置为 null 来清空变量。

cars=null;
person=null;

 

5. undefined

  undefined 这个值表示变量不含有值注意 undefined 和 null 都是小写。 

var d1;              //表示变量值未定义。只声明未定义
console.log(typeof d1);

 网页查看console

 

 

var x,y;
if(x == null){
    document.write(x);
}
if(y == undefined){
    document.write(y);
}

二者都会输出 undefined

 

 二、引用数据类型

  • Function
  • Object
  • Array
  • Date

 

1. function

函数的作用:解决冗余性的代码 为了封装
# 普通函数 用function来定义
function add(a,b){
    return a+b;
}
add(1,2);
                        
# 函数对象  匿名函数
var add = function(){}

# 自执行函数
(function (a,b) {
    console.log(a+b);
})(2,4);

 

2.object 

对象由花括号分隔。在括号内部,对象的属性以名称和值对的形式 (name : value) 来定义。属性由逗号分隔。

 

对象的创建,一般推荐使用

var people = {name : 'Tom', age : 21 , eat : function(){  }    }

 

var person = {
    "name":'alex',            //里面的key最好加上双引号
    "age":19,
    fav:function(){            //字典里面允许有函数
        alert(this.name);        //this相当于对象里面的self
    }
}                        
person.name

 

也可先创建对象再追加属性和方法

var people = new Object();
people.name = 'Tom';   
people.age = 21;  
people.eat = function(){  }

 

空格和折行无关紧要。声明可横跨多行: 

var person={
firstname : "John",
lastname  : "Doe",
id        :  5566
};

 

对象属性有两种寻址方式:

name=person.lastname;
name=person["lastname"];

 

<!DOCTYPE html>
<html>
<head> 
<meta charset="utf-8"> 
</head>
<body>

<script>
var person=
{
    firstname : "John",
    lastname  : "Doe",
    id        :  5566
};
document.write(person.lastname + "<br>");
document.write(person["lastname"] + "<br>");
</script>

</body>
</html>

 

最常用的对象创建方式:

第一种:先用new定义一个对象,然后,为对象赋值

function Demo(){
    var obj=new Object();
    obj.name="张思";
    obj.age=12;
    obj.firstF=function(){
    }
    obj.secondF=function(){
    }
    return obj;
}

var one=Demo();
// 调用输出
document.write(one.age);

 

第二种:直接使用this为对象赋值

function Demo(){
    this.name="张思";
    this.age=12;
    this.firstF=function(){
    }
    this.secondF=function(){
    }
}

var one=new Demo

// 调用输出
document.write(one.age);

 

3. Array

数组下标是基于零的,所以第一个项是 [0],第二个是 [1],以此类推。

下面的代码创建名为 cars 的数组:

var cars=new Array();
cars[0]="Saab";
cars[1]="Volvo";
cars[2]="BMW";

或者 (condensed array):

var cars=new Array("Saab","Volvo","BMW");

或者 (literal array):

var cars=["Saab","Volvo","BMW"];

 

<!DOCTYPE html>
<html>
<body>

<script>
var i;
var cars = new Array();
cars[0] = "Saab";
cars[1] = "Volvo";
cars[2] = "BMW";

for (i=0;i<cars.length;i++)
{
document.write(cars[i] + "<br>");
}
</script>

</body>
</html>

var arr = [{},12,'alex',null,undefined,true];        //里面可以有object{}
arr.length
arr[0]
arr[1]
for(var i =0; i < arr.length;i++){
    arr[i]
}

 

数组有四种方式:

var arr1 = new Array('a', 'b', 'c');    //这是一个预定义的数组,在创建时初始化
var arr2 = ['a', 'b', 'c' ];       //同样是在创建时初始化,但是这种创建更为简洁直观
var arr3 = new Array( );   
var arr4 = [ ];     //这两种是创建空的数组

 

就算变量定义的是数组格式,typeof 返回的数据类型还是 object :

var cars=new Array();
cars[0]="Saab";
cars[1]="Volvo";
cars[2]="BMW";
document.write(typeof cars); // object

如果你要判断该对象是否为数组,可以使用以下两种方法:

 

1、使用 isArray 方法

var cars=new Array();
cars[0]="Saab";
cars[1]="Volvo";
cars[2]="BMW";
// 判断是否支持该方法
if (Array.isArray) {
    if(Array.isArray(cars)) {
        document.write("该对象是一个数组。") ;
    }
}

2、使用 instanceof 操作符

var cars=new Array();
cars[0]="Saab";
cars[1]="Volvo";
cars[2]="BMW";

if (cars instanceof Array) {
    document.write("该对象是一个数组。") ;
}

 

 

三、其他

1. 声明变量类型

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

var carname=new String;
var x=      new Number;
var y=      new Boolean;
var cars=   new Array;
var person= new Object;

JavaScript 变量均为对象。当声明一个变量时,就创建了一个新的对象。

 

2. JavaScript 拥有动态类型

JavaScript 拥有动态类型。这意味着相同的变量可用作不同的类型:

var x;               // x 为 undefined
var x = 5;           // 现在 x 为数字
var x = "John";      // 现在 x 为字符串

 

3. 基本类型的变量是存放在栈内存(Stack)里的

var a,b;
a = "zyj";
b = a;
console.log(a);   // zyj
console.log(b);   // zyj
a = "呵呵";       // 改变 a 的值,并不影响 b 的值
console.log(a);   // 呵呵
console.log(b);   // zyj

 

图解如下:栈内存中包括了变量的标识符和变量的值。

 

4. 引用类型的值是保存在堆内存(Heap)中的对象(Object)

var a = {name:"percy"};
var b;
b = a;
a.name = "zyj";
console.log(b.name);    // zyj
b.age = 22;
console.log(a.age);     // 22
var c = {
  name: "zyj",
  age: 22
}; 

图解如下:

  • 栈内存中保存了变量标识符和指向堆内存中该对象的指针

  • 堆内存中保存了对象的内容

 

 

更多参考内容:

JavaScript 深入了解基本类型和引用类型的值

JavaScript 基本类型 引用类型 简单赋值 对象引用

 

posted @ 2019-08-24 18:28  PythonGirl  阅读(306)  评论(0)    收藏  举报