<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Document</title>
</head>
<body>
<script>
//JavaScript是弱类型语言 所有数据类型的值的变量都可以用'var'来进行声明,不像其他编程语言 例如c java严格区分了 数据类型(int/double/char/boolean)。
//JavaScript并没有避开数据类型,只是在声明时统一使用无类型(untyped)的“var”关键字而已,它的数据类型是根据所赋值的类型来确定的。
//js数据类型分基本数据类型和引用类型
//1.stack(栈)为自动分配的内存空间,它由系统自动释放;而heap(堆)则是动态分配的内存,大小也不一定会自动释放
// 2.JS分两种数据类型:
//基本数据类型:Number、String、Boolean、Null、 Undefined、Symbol(ES6),这些类型可以直接操作保存在变量中的实际值。
//引用数据类型:Object Array、RegExp、Date、Function不限于这些
//基本数据类型是指存放在栈中的简单数据段,数据大小确定,内存空间大小可以分配,它们是直接按值存放的,所以可以直接按值访问
//引用数据类型(存放在堆内存中的对象,每个空间大小不一样,要根据情况进行特定的配置)
//引用类型是存放在堆内存中的对象,变量其实是保存的在栈内存中的一个指针(保存的是堆内存中的引用地址),这个指针指向堆内存。
//引用类型数据在栈内存中保存的实际上是对象在堆内存中的引用地址。通过这个引用地址可以快速查找到保存中堆内存中的对象
//由于ECMAScript是松散类型的,因此需要一种手段来检测给定变量的数据类型-typeof
var t1 = 1;
console.log(typeof t1);//Number
var t2 = '哈哈abc';
console.log(typeof t2);//String
var t3 = null;
console.log(typeof t3);//Object ECMAScript的遗留bug
var t4 = new Object();
console.log(typeof t4);//Object
var t5 = true;
console.log(typeof t5);//boolean
var t6;
console.log(typeof t6);//underfined
var t7 = function () { };
console.log(typeof t7);//functuon
var t8 = new Array();
console.log(typeof t8);//Object
//注意typeof返回的结果是字符串类型 不推荐使用typeof操作符检测引用类型的值
//Number类型(js不区分整数值和浮点型)
//1.数值字面量:数值的固定值表示方法
var num1 = 10;
var num2 = 1000;
var num3 = 10.5;
//2.进制(进行算数运算时,八进制和十六进制表示的数值最后都将被转换成十进制数值)
//十进制
var num4 = 10;
//十六进制
var num5 = 0xA;//十进制10
//数字范围:0-9和A-F
//八进制
var num6 = 07;//十进制7
var num7 = 019;//十进制19
var num8 = 08;//十进制8
//数字范围0-7;
//浮点数
var n = 5e-324;
//浮点数值最高精度是17位小数,但在进行算术运算的时候精度不如整数
var result = 0.1 + 0.2;//结果不是0.3 而是0.30000000000000004
console.log(0.07 * 100);//7.00000000000000001
//不要判断两个浮点数是否相等
//数值范围
//最小值:Number.MIN_VALUE 这个值是5e-324
//最大值:Number.MAX_VALUE 这个值是1.7976931348623157e+308
//无穷大:Infinity 当运算结果这个最大值范围 返回Infinity
//无穷小:-Infinity 当运算结果这个最小值范围 返回-Infinity
//数值判断
//NaN:not a number
//NaN与任何值都不相等 包括他本身
console.log(NaN === NaN);//false
//isNaN:is not a Number 不是一个数字
console.log(isNaN(13));//false
console.log(isNaN('abc'));//true;
//String类型
//String类型值可用单引号或者双引号包括
//比如'abc','哈哈哈',"abc","嘻嘻嘻"
//在控制台打印:我长的"很帅"。
var msg = '我长的"很帅"。'
console.log(msg);//我长的"很帅"。
//字符串格式可使用转义符号'/':/n 换行 /t 空格 /r 回车 /f 进纸 等等。
//如何获取字符串长度 可以使用length属性 例如
var msg1 = '哈哈,我是大帅哥';
console.log(msg.length);//长度为8 标点符号也算入长度
//字符串如何拼接呢
var str1 = 'abc';
var str2 = '123';
console.log(str1 + str2);//abc123 此时说明+号两边都是字符串则是拼接 如果使用-号 则把字符串转换为数值类型 然后算术运算返回NaN
var str3 = 'abc';
var str4 = 123;
console.log(str3 + str4);//abc123 此时说明js会隐式转换 自动把数值类型转换为字符类型进行拼接
//如果字符类型和布尔类型相加呢
console.log('哈哈:' + true);//哈哈:true 隐式转换
//那么如何不让字符串与数值拼接呢
console.log(123 + parseInt("哈哈")); //NaN 把字符类型用parseInt函数转换为数值类型与123相加 返回NaN
console.log(123 - '哈哈');//NaN -号会触发隐式转换 把字符类型转换为数值类型进行算术运算
//要把一个值转换为字符串有两种方式 toString()和String()
var ages = 11;
var agesAsString = ages.toString();//字符串'11'
var found = true;
var foundAsString = found.toString();//字符串'true'
//数值 布尔值、对象值、字符串值都有一个toString方法,但null和underfined没有这个方法
var srr = undefined;
// console.log(srr.toString());//类型错误 toString()方法没有定义
//toSrting()方法可以传参数-在调用数值的toString()方法的情况下 可输出二进制 八进制 十六进制
var numm = 10;
console.log(numm.toString(2));//'1010'
console.log(numm.toString(8));//'12'
console.log(numm.toString(16));//'a'
//在不知道要转换的值是不是Null和underfined的情况下 可以用转型函数String(),这个函数可将任何类型的值转换为字符串
//如果String()函数要转换的值有toString方法 则优先使用toString()-没有参数 :
//如果值是null 则返回'null';
//如果这个值是underfined 则返回'underfined'。
var srr2 = undefined;
console.log(String(srr));
//那么我们如何把其他类型的值转换为数值类型值呢
//第一种使用Number()函数
var str100='abc';
var isRight=true;
console.log(Number(str100));//NaN
console.log(Number(isRight));//1
console.log(Number('abc123'));//NaN Number()函数参数中如果有一个是字符 那么返回NaN
//parseInt()函数 parseInt()无法转换布尔类型值 返回NaN
var noRight=false;
var str110='abc';
console.log(parseInt(noRight));//NaN
console.log(parseInt(str110));//NaN
console.log(parseInt('123abc'));//123 数字开头返回数值
console.log(parseInt('abc123'));//NaN 非数字开头返回NaN
//parseFloat()函数 parseFloat()无法转换布尔类型值 返回NaN
var isLeft=true;
var str113='abc';
var double='123.66abc';
console.log(parseFloat(double));//123.66 如果使用parseInt() 那么只返回123 小数点后省略了
console.log(parseFloat(isLeft));//NaN
console.log(parseFloat(str113));//NaN
console.log(parseFloat('123abc'));//123
console.log(parseFloat('abc123'));//NaN 和parseInt()一样 非数字开头返回NaN
//取正或取负 + -
var str118='123';
var str119='123abc';//含有非数字的字符串 使用取正取负一律返回NaN
var isOk=true;
console.log(+isOk);//1
console.log(-isOk);//-1
console.log(+str118);//123
console.log(-str118);//-123
console.log(Math.abs(-str118));//123
//Boolean类型
//Boolean类型只有两个值:true和false 区分大小写
//计算机内部存储 true为1 false为0
//Boolean类型常用来判断某些结果是否相等或符合 经常应用于if else等流程判断语句
//Underfined和Null
//Underfined表示访问一个只声明但没有赋值的变量时默认返回Underfined。
//null表示空,一个值被定义了,但是这个值为空值 变量的值如果想为null,必须手动设置 在js垃圾回收机制标识符方法里 可手动设置Null来清空
//如何被其他类型转换为布尔类型呢?
//使用Boolean()函数 0、空字符串、null、underfined、NaN会转换成false 其他都为true;
var n1=0;
var s2='';
var n2=null;
var s3=undefined;
var s4=NaN;
console.log(Boolean(n1),Boolean(s2),Boolean(n2),Boolean(s3),Boolean(s4));//都是false
var n6='1a';
console.log(Boolean(n6));//true
//Object类型
//Object类型的值就叫做对象 是一组无序的数值和功能的集合 但是需要根据实际情况来区分对象与对象类型
//创建Object实例的方式有两种
//1.使用new操作符后跟Object构造函数
var person = new Object();//不传递参数情况下也不推荐省略()
person.name = "Nicholas";
person.age = 29;
//仅仅创建Object的实例并没有什么用处 Object类型是所有它的实例的基础
//Object类型的每个实例都具有下列属性和方法。
//constructor:保存着用于创建当前对象的函数 对于new Object()来说 构造函数就是Object()
//hasOwnProperty():用于检查给定的属性在当前对象实例中是否存在(不是通过原型继承的属性)
//isPrototyperOf():用于检查传入的对象是否是当前对象的原型
//propertyIsEnumberable():用于检查给定的属性是否能够使用for-in语句来枚举。
//tolocaleString():返回对象的字符串表示
//toString():返回对象的字符串表示
//valueOf():返回对象的字符串、数值或布尔值表示。
//2.对象字面量是对象定义的一种简写形式,目的在于简化创建包含大量属性的对象的过程。
var person = {
name: "Nicholas",
age: 29
};
</script>
</body>
</html>
JavaScript数据类型及转换规则
最新推荐文章于 2024-09-07 13:38:28 发布