es,js系列教程之数据类型(五)

在 JavaScript中数据类型有分为基本的数据类型和引用数据类型。

基本数据类型

  • Number(ES5): typeof()返回"number"。用于任何类型的数字:整数或者浮点数。
  • String(ES5): typeof()返回"string"。用于字符串。一个字符串可以包含一个或多个字符,所以没有单独的单字符类型。
  • Boolean(ES5): typeof()返回"boolean"。用于 true 和 false。
  • Null(ES5): typeof()返回"object"。用于未知的值 —— 只有一个 null 值的独立类型。
  • Undefined(ES5): typeof()返回"undefined"。用于未定义的值 —— 只有一个 undefined 值的独立类型。
  • Symbol(ES6): typeof()返回"symbol"。用于唯一的标识符。

Undefined类型
只有一个值,即undefined值。使用var声明了变量,但未给变量初始化值,那么这个变量的值就是undefined。

Null类型被看做空对象指针,前文说到null类型也是空的对象引用。

引用数据类型(Object)

js中对象是一组属性与方法的集合。这里就要说到引用类型了,引用类型是一种数据结构,用于将数据和功能组织在一起。引用类型有时候也被称为对象定义,因为它们描述的是一类对象所具有的属性和方法。三大引用类型:

  • Object类型

我们看到的大多数类型值都是Object类型的实例,创建Object实例的方式有两种。

第一种是使用new操作符后跟Object构造函数,如下所示

var person = new Object();

person.name = "Micheal";

person.age = 24;

第二种方式是使用对象字面量表示法,如下所示

var person = {

  name : "Micheal",

  age : 24

};
  • Array类型

数组的每一项可以用来保存任何类型的数据,也就是说,可以用数组的第一个位置来保存字符串,第二个位置保存数值,第三个位置保存对象....另外,数组的大小是可以动态调整的。

创建数组的基本方式有两种

第一种是使用Array构造函数,如下所示

var colors = new Array("red","blue","yellow");

第二种是使用数组字面量表示法,如下所示

var colors = ["red","blue","yellow"];
  • Function类型

每个函数都是Function类型的实例,而且都与其他引用类型一样具有属性和方法。函数通常是使用函数声明语法定义的,如下所示

function sum(num1,num2){
  return num1 + num2;
};

这和使用函数表达式定义函数的方式相差无几。

var sun = function (){
  return sum1 + sum2;
};

总结

基本数据类型和引用数据类型访问

  • 基本类型值:存在栈中,按值访问,操作的是他们实际保存的值;
  • 引用类型值:栈中保存地址,堆中保存值,按引用访问,当查询时,我们需要先从栈中读取内存地址,然后再顺藤摸瓜地找到保存在堆内存中的值;

基本数据类型和引用数据类型复制

  • 基本类型变量的传递(复制):(互不干涉)

    从一个变量向一个变量复制时,会在栈中创建一个新值,然后把值复制到为新变量分配的位置上,改变源数据不会影响到新的变量;
  • 引用类型变量的传递(浅复制):(铁锁连横)

    复制的是存储在栈中的指针,将指针复制到栈中未新变量分配的空间中,而这个指针副本和原指针执行存储在堆中的同一个对象,复制操作结束后,两个变量实际上将引用同一个对象;因此改变其中的一个,将影响另一个;

typeof 运算符可以查看变量的类型:

  • 两种形式:typeof x 或者 typeof(x)。
  • 返回的类型的字符串,比如 "string"。
  • null 返回 "object" —— 这是语言中的一个错误,实际上它并不是一个对象
  • Symbol 返回"function"
  • 一般object建议用instanceof来判断类型
typeof Symbol() // 'symbol'
typeof Number() // 'number'
typeof Sring() // 'string'
typeof Function() // 'function'
typeof Objecr() // 'object'
typeof Boolean() // 'boolean'
typeof null() // 'object'
typeof undefined() // 'undefined'

typeof用于判断基本类型,instanceof 用于判断对象类型。

类型转换

  • 转换为 number 类型

转换
undefinedNaN
null0
true 和 false1 and 0
string字符串开始和末尾的空白会被移除,剩下的如果是空字符串,结果为 0,否则 —— 从字符串中读出数字。错误返回 NaN。
  • 使用Number()显示转换

let str = '123';
alert(str); // string
let num = Number(str);
alert(typeof num); // number
  • 使用算术操作符+

let str = '123';
alert(str); // string
let num = +str;
alert(typeof num); // number
alert(str + 4); // '1234',字符串拼接
  • 使用算术操作符/

alert('6'/'3'); // 2
  • 使用位运算符~~

alert(typeof ~~'123'); // number
  • 转换为 string 类型

  • 显示转换:String()

  • 隐式转化:'hello' + 123

  • 转换为 boolean 类型

  • 假值,比如 0、空的字符串、null、undefined 和 NaN 变成 false。

  • 其他值变成 true。'0',[],' '(空格,属于非空的字符串)----true

  • 操作符:Boolean()

  • 操作符:!!

测试题

1、 最终输出是什么值?

var a = 100;
var b = a;
a = 200;
console.log (b);

2、 最终输出是什么值?

var a = {age : 20};
var b = a;
b.age = 21;
console.log (a.age);

3、 最终输出是什么值?

console.log("" + 1 + 0);
console.log("" - 1 + 0);
console.log(true + false);
console.log(6 / "3");
console.log("2" * "3");
console.log(4 + 5 + "px"); 
console.log("$" + 4 + 5); 
console.log("4" - 2);   
console.log("4px" - 2);
console.log(7 / 0);
console.log("  -9\n" + 5); 
console.log("  -9\n" - 5);
console.log("-4\t"+6); 
console.log(null + 1);
console.log(undefined + 1);
console.log(!![]); 
console.log(!!''); 
console.log(!!' '); 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

科技百宝箱

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值