一、 JavaScript里的数据类型是什么?
百度里的数据类型定义
数据类型在数据结构中的定义是一组性质相同的值的集合以及定义在这个值集合上的一组操作的总称。
生活中的延伸
从生活中出发: 在日常生活中,描述不同的东西,有不同的一些单位。 实际上,编程也是要解决我们生活中的问题,在程序中,如何描述这些内容呢。针对不同的内容,根据其特性,需要用不同的单位(类型)加以描述,这就是数据类型的概念。
比如,描述人的时候:
姓名:张三
年龄:18
性别:男
职业:法外狂徒
为什么要对数据进行分类
一句话:方便管理和操作,符合现实需求
二、在JavaScript中有哪些数据类型?
在js中我们把数据类型分成了两大类:
1.基本数据类型:
数值(数字):number
字符串:string
命名未赋值:undefined
布尔类型:Boolean
空类型:null
2.复杂数据类型:
又称引用数据类型 在存储变量中存储的仅仅是地址(引用),因此叫做引用数据类型,通过new关键字创建的对象(系统对象、自定义对象),如Object、Array、Data等
typeof 操作符
语法: typeof(需要检测的信息);
由于js中的’变量’是’松散类型’的,所以它提供了一种检测当前变量的数据类型的方法,也就是’typeof’关键字
var str= '大可爱';
//写法一
console.log(typeof(str))//string
//写法二
console.log(typeof str )//string
三、基本数据类型
1.Number类型
作用:用来表示数字的 ,任何数字都可以使用数值类型。比如商品价格、年份、年龄等。
Number类型包含整数和浮点数(浮点数,数值必须包含一个小数点,且小数点后面至少有一位数字,需要大于0)两种值。
整数:var a = 10;
浮点数:var b = 13.14;
number还有一种特殊的样式:
‘特殊的NaN’
NaN:非数字类型。
特点:
① 涉及到的 任何关于NaN的操作,都会返回NaN
② NaN不等于自身。
注意 NaN不是一个数值,但他是number类型;
var num = NaN;
var num1 = NaN;
var num2 = 1;
var num3 = 2;
//1)NaN表示一个本来要返回数字,但是由于某种原因,没有返回成功,就用NaN表示。
console.log(typeof(num));//NaN
//2)NaN与任何值都不等,包括其本身;
console.log(num == num1)//NaN
//3) NaN与其他任意值进行运算,都为NaN;
console.log(num+num2);//NaN
检测参数是否是非数值的:
**isNaN **
isNaN() ‘函数用于检查其参数是否是’非数字值’。
1.如果是数值返回:‘false’;
2.如果是非数值返回:
var str = '孙行者';
console.log(isNaN(str ));//true
var num = 1;
console.log(isNaN(num));//false
= 和 == 区别
//1.'=':赋值
//2.'==':进行对比判断
var num1 = 1;
var num2 = 1;
console.log(num1 == num2);//true
2.String字符串类型
组成:由一系列的字符构成的数据。
写法:引号‘ ’(英文单引号)或“ ”(英文双引号)来表示,
例如:“张三”
‘李四’
字符串的长度
用length来表示,注意:数组的长度使用的也是length
在js中length为属性
字符串的样式
文本字符串类型的数据可以和html的标签联合使用
例如 var text = ”123”+”
特殊转义字符
代码 | 输出 |
---|---|
’ | 单引号 |
” | 双引号 |
\ | 反斜杠 | |
\n | 回车 |
\r | 回车 |
\t | 制表 |
\b | 退格符 |
\f | 换页符 |
\v | 垂直制表符 |
\xNN | 由两位十六进制数值NN指定的Latin-1字符 |
\uNNNN | 由四位十六进制数NNNN指定的Unicode字符 |
\NNN | 由一位到三位八进制数(1到337)指定的Latin-1字符。ECMAScript v3不支持,不要使用这种转义序列 |
3.Boolean类型
该类型只有两个值,
true
和
false
,注意:一般会在判断(条件、循环)等语句中来使用。’ 基本使用如下:
我们有可以使用
typeof
运算符来获取布尔值的类型。
var flag = true;
console.log(flag ); // 检测类型 console.log(typeof(a));//boolean
var flag = false;
console.log(flag );
console.log(typeof(flag ));//boolean
4.Undefined类型 和 null类型
Undefined类型
undefined:是未定义类型表示一个变量在声明的时候没有初始值,那么它的值就是undefined。
//1、如果一个变量,通过var声明了,但是没有赋值,则会出现如下提示:
var name;
console.log(name);// undefined
//2.检测没有赋值的变量的类型
console.log(typeof name);//undefined
//3、如果一个变量,没有通过var声明,直接就访问会报错:
//…is not defined
//4.检测没有声明变量的类型
console.log(typeof a);//undefined
Null类型
null类型被看做
空对象指针
,null类型也是空的对象引用。
作用:当将来需要存储一个对象的时候,可以给其初始值赋为null;
四、复杂数据类型
Object 类型
Object(对象):对象是某个特定引用类型的实例。新对象是使用new操作符后跟一个构造函数来创建的。构造函数本身就是一个函数,只不过该函数是出于创建新对象的目的而定义的。复杂的数据类型,引用数据类型,一般情况下,对象中包含了多个属性和方法。
var person = new Object();
这行代码创建了Object引用类型的一个新实例。然后把该实例保存在了变量person中。使用的构造函数函数是object,他只为新对象定义了默认的属性和方法。
创建Object(对象)实例的两种方式
-
使用构造函数构建对象,new操作符后跟Object 构造函数。
java一个对象创建成功不能动态的添加和删除属性。Java里的对象一共有多少属性由它的构造函数或它的类,不能动态添加或删除。但是JavaScript可以动态添加或删除属性。
var obj = new Object();
obj.name = "lilihuan"; //动态添加name属性
obj.age = 12; //动态添加age属性
-
使用
对象字面量
表示法。对象字面量是对象定义的一种简写形式,目的在于简化创建包含大量属性的对象的过程。
对象使用”{}“作为边界,对象是由多个属性(方法是一种特殊的属性)来组成,每个属性之间通过”,“分割,属性名与属性值之间通过”:”分割。属性名可以不使用双引号,当属性名中包含特殊字符一定使用双引号,属性值一般为常量或者具体的值,也可以变量
var person = {
name : "lilihuan",
age:18,
gender:"male"
};
访问对象属性的方法
点访问符
对象名.属性名
obj.name
中括号访问符
var name = "name";
obj[name]
=>(等价于)
obj["name"]
所有的对象直接或者间接的继承Object,也就是说所有的对象都可以调用Object原型中的方法和属性。
**删除属性**
delete obj.no;
var obj = {
name:"张三",
age:18,
gender:"男",
career:"法外狂徒",
no:123
}
console.log(obj);//{name:'张三',age:12,gender:'男',career:'法外狂徒',no:123}
delete obk.no;
console.log(obj);//{name:'张三',age:12,gender:'男',career:'法外狂徒'}
## 五、数据类型转换 ### 为什么要数据转换
JavaScript 是弱类型语言,而且JavaScript声明变量的时候并没有预先确定的类型,变量的类型就是其值的类型,也就是说变量当前的类型由其值所决定,夸张点说上一秒种的String,下一秒可能就是个Number类型了,这个过程可能就进行了某些操作发生了强制类型转换。虽然弱类型的这种不需要预先确定类型的特性给我们带来了便利,同时也会给我们带来困扰。
###1. 转布尔类型
Boolean()
:
可以将任意类型的数据转为布尔类型
语法:Boolean(值) 规则:
//等于false的:
//null undefined '' 0 NaN
// 1.null
console.log(Boolean(null)); //false
// // 2. 0
console.log(Boolean(0)); //false
// // 3.''
console.log(Boolean('')); //false
// // 4.undefined
console.log(Boolean(undefined)); //false
// // 5.NaN
console.log(Boolean(NaN)); //false
//等于ture的://数字 非空字符串 一个空对象 一个空数组
// 1. 123
var a = 123
console.log(Boolean(a));//ture
// // 2.非空字符串
var b = '天很蓝,找一个风很大的地方把我忘了';
console.log(Boolean(b));//ture
// // 3.空的一个对象
var c = {};
console.log(Boolean(c));//ture
// // 4.空数组
var d = [];
console.log(Boolean(d));//ture
2、转字符型
-
String()
:可以将任意类型的数据转为字符型
语法:String(值)
返回值:转换的内容加引号
var a = 123;
console.log(typeof(a));//number
console.log(a);
console.log(typeof(String(a)));//string
// 2. NaN
var b = NaN;
console.log(typeof(b));//number
console.log(typeof(String(b))); //string
// 3.null
var c = null;
console.log(typeof(c)); //objcet
console.log(typeof(String(c))); //string
// 4.未定义类型的
var d = undefined;
console.log(typeof(d)); //undefined
console.log(typeof(String(d))); //string
// 5.布尔值
var e = true;
console.log(typeof(e)); //Boolean
console.log(typeof(String(e))); //string
-
toString():除了null和undefined之外的数据都可用toString转换
语法:值.toString()
var num = 123 ;
num.toString() //'123';
var str = true;
str.toString();// 'ture';
//null和undefined用toString转会报错
var res = null;
res.toString() //Cannot read property , toString’of null
var res2 = undefined;
res2.toString() //TypeError: Cannot read property " toString’of undefined
-
隐式转换
语法:值 + “”;
123 + ''; //'123'
null + '';//'null'
'' + undefined; //'undefined'
3、转数值型
Number()
;可以将任意类型数据转为数值型;
规则如下:
//1: null 转 number:
Number(null)// 0
//2: Undefined转number:
console.log(Number(undefined)) //NaN
var a;
console.log(Number(a))//NaN
//3:布尔 转 number 结果:
true = number //1
console.log(Number(ture)) //1
false = number // 0
console.log(Number(false)) //0
//4:空字符串 转 number
console.log(Number(' ')) //0
//5:非空字符串 转 number 规则
//如果字符串里 的内容全部是有效数字,那么就转成对应的有效数字,否则,转number后就是NaN.
var arr = '123';
console.log(Number(arr)); //123
var arr1 = '12.34'
console.log(Number(arr1)); //12.34
var arr2 = '12.31.54';
console.log(Number(arr2)); //NaN
var arr3 = '123nx';
console.log(Number(arr3)); //NaN
var arr4 = '你好';
console.log(Number(arr4)); //NaN
//注意:数字前面有零的就省略0
var arr5 = '012138';
console.log(Number(arr5)); //12138 注意;如果前面有0的化就会默认隐藏掉
**parseInt()**取整
给浮点小数进行取整
方法:parseInt(值);
注意:
-
从第一个字符开始转换,如果第一个字符就是非数字,那么得到的一定是NaN,
-
如果第一个不是非数字,就向后转换,直到遇到一个小数点,或非数字,则停止转换,将前面转面转的内容输出
-
如果使用parseInt进行转换,他会把字符型转成数字型的,并且取整
var str1 = '123';
console.log(parseInt(a)); //123
var str2 = '13.14';
console.log(parseInt(b));//12
var str3 = '12.31.14';
console.log(parseInt(c)); //12
var str4 = '你好';
console.log(parseInt(d)); //NaN
var str5 = 'w123';
console.log(parseInt(e)); //NaN
var str6 = '123w';
console.log(parseInt(r)); //123
**parseFloat()**取浮点数
语法:parseFloat();
- 从第一个字符开始转换,如果第一个字符就是非数字,那么得到的一定是NaN,
- 如果第一个是数字,就向后转换,直到遇到一个小数点,或非数字,则停止转换,将前面转面转的内容输出
var str1 = '123';
console.log(parseFloat(a)); //123
var str2 = '12.12';
console.log(parseFloat(b)); //12.12
var str3 = '12.31.14';
console.log(parseFloat(c));//12.31
var str4 = '你好';
console.log(parseFloat(d)); //NaN
var str5 = 'w12.31'
console.log(parseFloat(e));// NaN
var str6 = '12.31w';
console.log(parseFloat(r));//12.31
isNaN()
检测是否是非数字
语法:isNaN(检测值)
返回值:非数字—>true 数字—>false;
说明:isNaN();会发生一个隐式转换,会尝试着将检测值转为number;然后进行判断
console.1og (isNaN(123)) ://false;
console.1og (isNaN("123a")) ://true:
console. log (isNaN(true)) ://false
小结
:
转布尔的方法:Boolean() ;转为false的有: 0 NaN ‘’ null undefined;
转字符串的方法有 String() toString() ;注意null和undefined不能用toString转
转数值:Number() ,parseInt(),parseFloat() 注意转换规则
isNaN():检测是否是非数字 如果是数字返回 false ;如果是非数字,返回true;