[02] 数据类型

本文深入探讨JavaScript中的数据类型,包括基础数据类型与引用数据类型的存储方式,以及如何使用typeof、instanceof、constructor和prototype进行类型判断。此外,还详细讲解了数据类型转换,包括强制转换与隐式转换的过程和特性。
数据类型
  • 基础数据类型:数据存在栈中。
  • 引用数据类型:数据存储堆中。
基础数据类型(primitive type)
  • undefined未定义
  • string字符
  • number数字
  • boolean布尔
  • null空

  • 基础数据类型是按值访问,可以直接操作保存在变量中的值
  • 基础数据类型是将值保存在变量对象之中
  • 基础数据类型进行赋值的时候,实际上是赋的一个新值,两个变量互不干扰

引用数据类型(object type)
  • Object
  • Array
  • Function
  • Date
  • Error

  • 引用数据类型的值是保存在堆内存的一个对象
  • 堆内存并无法直接访问,操作对象的时候操作的是对象的引用
  • 可以多个变量指向同一个地址,其中一个指向改变值,其他的指向都改变

判断变量的数据类型
typeof
  • typeof返回的类型都是字符串类型
  • typeof可以查看变量的数据类型
  • typeof在判断非object类型的变量时十分方便

    instanceof
  • instanceof判断已知对象类型的方法
  • instanceof对类型的大小写敏感

    contrucetor
  • construcetor是根据对象的contructor属性进行判断

    prototype
  • prototype是一个通用方法,返回的值是一个字符,除了null、undefined之外任何值都有toString()方法
window.onload = function () {
var a = 'abc';
var b = 10;
var c = true;
var d = undefined;
var e = null;
var f = new Object();
var g = function () { alert('123'); };
var h = new Error();
var i = new Date();
var j = [1,2,3];
//typeof
console.log("typeof进行类型判断!!!!");
console.log(typeof a);//string
console.log(typeof b);//number
console.log(typeof c);//boolean
console.log(typeof d);//undefined
console.log(typeof e);//object
console.log(typeof f);//object
console.log(typeof g);//function
console.log(typeof h);//object
console.log(typeof i);//object
console.log(typeof j);//object
console.log(typeof a === 'string');//true
//instanceof
console.log("instanceof进行类型判断!!!!");
console.log(e instanceof Object);//false???
console.log(f instanceof Object);//true
console.log(g instanceof Function);//true
console.log(h instanceof Error);//true
console.log(i instanceof Date);//true
console.log(j instanceof Array);//true
//contructor
console.log("construetor进行类型判断!!!!");
console.log(f.constructor === Object);//true
console.log(g.constructor === Function);//true
console.log(i.constructor === Date);//true
console.log(j.constructor === Array);//true
console.log(f.constructor);//function Object() {}
console.log(g.constructor);//function Function() {}
console.log(i.constructor);//function Date() {}
console.log(j.constructor);//function Array() {}
//prototype
console.log("prototype进行类型判断!!!!");
console.log(Object.prototype.toString.call(a) === '[object String]');//true
console.log(Object.prototype.toString.call(b));//[object Number]
console.log(Object.prototype.toString.call(c));//[object Boolean]
console.log(Object.prototype.toString.call(d));//[object Undefined]
console.log(Object.prototype.toString.call(e));//[object Null]
console.log(Object.prototype.toString.call(f));//[object Object]
console.log(Object.prototype.toString.call(g));//[object Function]
console.log(Object.prototype.toString.call(h));//[object Error]
console.log(Object.prototype.toString.call(i));//[object Date]
console.log(Object.prototype.toString.call(j));//[object Array]
};
数据类型转换
强制转换(显式转换)
parseInt字符转整型

转整数,干掉小数
从左到右找能转的转
转换失败 返回 NaN
.忽略字符前导0
.忽略字符前导空格
8进制转10

parseFloat整型转字符

转小数
遇整数,转整数
从左到右找能转的转
转换失败 返回 NaN
忽略字符前导0
忽略字符前导空格
8进制转10

Number

严格型转换: 先找不能转的情况,找到返回NaN
其他特征同parseFloat

隐式类型转换
  • "+"运算符是拼接,字符拼接上任何数据都是字符 将 数字 -> 字符 200 + '3'
  • " - ", " * ", " / ", " % ", "++", " -- " 将 字符-> 数字 '200' - 3
  • < 数字的比较 、字符串的比较

  • "!"将右边的数据类型转成布尔值并且取反
  • "=="只要内容相等就相等 而 "==="内容相等并且数据类型要相等才算相等
window.onload = function () {
//强制转换
var a = '+100.5';
var b = true;
var c = ' ';
var d = [1];
var d2 = [1,2];
var e = null;
var f = 200;
var g = '12.34元';
var h = {};
var i = undefined;
var j = function() {alert("123");};
console.log((a+100));//'+100.5100' string
console.log(Number(a));//100.5 number
console.log(Number(b));//1
console.log(Number(c));//0
console.log(Number(d));//1
console.log(Number(d2));//NaN
console.log(Number(e));//0
console.log(Number(h));//NaN
console.log(Number(i));//NaN
console.log(Number(j));//NaN
console.log(parseInt(a));//100 number
console.log(parseFloat(a));//100.5 number
console.log(parseFloat(f));//200 number
console.log(parseFloat(g));//12.34 number
//隐式转换
console.log("开始隐式转换");
var a = '100';
var b = 50;
var c = '200';
var d = 100;
console.log(typeof (a+b));//string 10050
console.log(typeof (b-a));//number -50
console.log(typeof (b*a));//number 5000
console.log(typeof (b/a));//number 0.5
console.log(typeof (b%a));//number 50
console.log(typeof ++a);//number 101
console.log(a>b);
console.log(typeof !b);
console.log(typeof (a==b));
};

转载于:https://www.cnblogs.com/mybilibili/p/10473473.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值