一.简单数据类型
1.undefined
console.log(age)//Uncaught ReferenceError: age is not defined
//未声明的变量会报错
console.log(typeof(age))//undefined
//对未声明的对象执行 typeof 操作符返回 undefined
var n1;
console.log(n1);//undefined
//使用 var 声明变量但未对其加以初始化时,变量在内存中已经存在
console.log(typeof(n1))//undefined
//对未初始化的变量执行 typeof 操作符返回 undefined
2.null
var n2=null;
console.log(n2);//Uncaught SyntaxError: Unexpected token :
//在内存中是找不到n2这个变量,因为null 置空销毁变量
console.log(typeof(n2))//object
//null值表示一个空对象指针
if(car!=null){
//对 car 对象执行某些操作
}
//只要意在保存对象的变量还没有真正保存对象,就应该明确地让该变量保存 null值
3.Boolean 布尔类型
var message='hello world';
console.log(Boolean(message))//true
//Boolean类型的字面值只有两个 true/false;
//要将一个值转换为其对应的 Boolean 值,可以调用转型函数 Boolean();
// Boolean()的返回值取决于转换值的数据类型及其实际值:
// 数据类型 \ 转换为 true 的值 \ 转换为 false 的值
// Boolean \ true \ false ;
//String \ 任何非空字符串 \ ''(空字符串) ;
//Number \ 任何非零数字值(包括无穷大) \ 0和 NaN ;
//Object \ 任何对象 \ null
//Undefined \ n/a(N/A , not applicable 不适用) \ undefined
4.Number 数值类型
包括 整数和浮点数;
数值字面量格式:十进制、八进制(0开头,0-7)、十六进制(0x开头,0-9及A-F);
var n1=12;
var n2=23;
console.log(n1+n2)//35
console.log(typeof(n1+n2))//number
//两个数值类型的变量相加,得到的是一个数值类型
var n1=12;
var n2='23';
console.log(n1+n2)//1223
console.log(typeof(n1+n2))//string
//一个数值类型和一个字符串相加,得到的是一个字符串
var n1=12;
var n1=23;
console.log(n1-n2)//-11
console.log(typeof(n1-n2))//number
//两个数值类型的变量相减去,得到的是一个数字类型
var n1=12;
var n1='23';
console.log(n1-n2)//-11
console.log(typeof(n1-n2))//number
//一个数值类型减去一个数字字符串,得到的是一个数值类型
var n1=12;
var n1='23ab';
console.log(n1-n2)//NaN
console.log(typeof(n1-n2))//number
//一个数值类型减去一个非数字的字符串,得到的是 NaN, 数值类型
//NaN not a number 是数值类型 但不是数值
console.log(NaN/10)//NaN NaN除以非数值返回 NaN;
console.log(NaN==NaN)//false NaN与任何值都不相等包括其本身
console.log(isNaN(NaN))//true
console.log(isNaN(10))//false (10是一个数值)
console.log(isNaN('10'))//false (可以被转换成数值10)
console.log(isNaN('blue'))//true (不能被转换成数值)
console.log(isNaN(true))//false (可以被转换成数值1)
把非数值转换成数值:Number()、parseInt()、parseFloat()
var n1=6;
var n2=3;
console.log(n1/n2)//2
console.log(typeof(n1/n2))//number
//两个数值类型的变量相除,得到的是一个数值类型
var n1=6;
var n2='3';
console.log(n1/n2)//2
console.log(typeof(n1/n2))//number
//一个数值类型和一个数字的字符串相除,得到的是一个数值类型
var n1=6;
var n2='3ac';
console.log(n1/n2)//NaN
console.log(typeof(n1/n2))//number
//一个数值类型和一个非数字的字符串相除,得到的是 NaN,是一个数值类型
var n1=6;
var n2=0;
console.log(n1/n2)//Infinity
console.log(typeof(n1/n2))//number
//正数和0相除,得到的是 Infinity,是一个数值类型
//负数和0相除,得到的是 -Infinity,是一个数值类型
var n1=0;
var n2=0;
console.log(n1/n2)/NaN
console.log(typeof(n1/n2))//number
//0和0相除,得到的是NaN 是一个数值类型
练习
如果今天是星期六,1000天以后是周几
console.log((6+1000)%7);//5
5.String 字符串类型
任何字符串的长度都可以通过访问其 length属性取得,但是如果字符串含有双字节字符,length 属性就不会精确返回字符串中的字符数目了;
要把一个值转换成字符串有两种办法:
1.toString()方法:适用数值、布尔值、对象和字符串值;
因为数值、布尔值、对象和字符串值都有一个 toString()方法,但 null 和 undefined 没有
2.转型函数String():能够将任何类型的值转换成字符串
二.复杂数据类型------Object 类型
对象其实就是一组数据和功能的集合,new 创建 var o=new Object();
Object类型所具有的任何属性和方法也同样存在于更具体的对象中;
Object 的每个实例都具有下列属性和方法:
constructor:保存着用于创建当前对象的函数,构造函数;
hasOwnProperty(propertyName):用于检查给定的属性在当前对象实例中(而不是在实例的原型中)是否存在。其中,作为参数的属性名必须以字符串形式指定(eg:o.hasOwnProperty("name"));
isPrototypeof(object):用于检查传入的对象是否是当前对象的原型;
propertyIsEnumerable(propertyName) :用于检查给定的属性是否能够使用 for-in 语句来枚举。
toLocalString():返回对象的字符串表示,该字符串与执行环境的地区对应;
toString():返回对象的字符串表示;
valueof():返回对象的字符串、数值或布尔值表示。通常与 toString()的方法相同。
三.判断数据类型
typeof() 返回的值:
undefined ------如果这个值未定义;
boolean------如果这个值是布尔值;
string------如果这个值是字符串;
number-----如果这个值是数值;
object------如果这个值是对象或者 null;
function------如果这个值是函数;