javascript的变量是松散类型的,可以用来保存任何类型的数据。js拥有动态类型,相同的变量可以用作不同的类型。javascript变量均为对象,当声明一个变量时,就创建了一个新的对象。
类型检测
instanceof
用于检测构造函数的 prototype
属性是否出现在某个实例对象的原型链上,即instanceof 只能用来判断两个对象是否属于实例关系,也就是说,instanceof后面的参数是引用型对象=需要判断的是值类型就应该用typeof。返回布尔值。如以下当判断是否为string类型时会返回false,但用typeof获取值类型时又会返回string。
var test = [];
console.log(test instanceof Array);//true
var test = {name:'aa'}
console.log(test instanceof Object);//true
var test = 'a';
console.log(test instanceof String);//false
typeof
typeof
操作符返回一个字符串,表示未经计算的操作数的类型,但是对于一些创建的对象,它们都会返回'object'。
返回值为:string\number\undefined\boolean\object\function\null
var test = [];
console.log(typeof test);//object
var test = {name:'aa'}
console.log(typeof test);//object
var test = 'a';
console.log(typeof test);//string
var test = 123;
console.log(typeof test);//number
还有一些其他的类型判断函数,具体记录。
值类型:
按照原始值的方式存储,也叫原始数据类型。
string字符串
String()、toString()(toString()无法转换null和undefined)
var arr = new Array()//对象引用型
var arr = new Array('a','b')
var arr = []
var arr = ['a','b']
number数字
Number()、parseInt()、parseFloat()
如果number的数值超出了范围,会被转换成Infinity(无穷)
NaN是一个特殊的值,表示本来要返回数值的操作数未返回数值的情况。任何设计NaN的操作都会返回NaN(NaN与任何值都不相等,包括NaN本身)
+ => Number()
var a = 'a';
var b = 'b';
var test = '01';
console.log(typeof(a));//string
console.log(typeof(test));//string
test = + a;
console.log(typeof(test));//number
console.log(test);//NaN
a = + b;
console.log(typeof(a));//number
console.log(a);//NaN
boolean布尔
!! => Bollean()
任何数据类型都可以转换成boolean,使用Boolean()函数可以强制转换。
var a = !!1;
console.log(a);//true
console.log(typeof(a));//boolean
null空
空指针对象,表示存储了值,但是空指针,当一个变量是为了保存一个对象,但没办法立即初始化的时候,应该为之分配一个null值。
undefined未定义
当一个变量声明但未初始化时,即没有存储值,就会被赋予undefined值。没定义也被认为是undefined。
symbol
表示独一无二的值
引用数据类型:
object对象
5种基本的数据类型以外都是对象。如数组、函数等。
对象属性有两种寻址方式:
obj.name
obj['name']
array数组
//第一种
var A=[12,78,78,78,89]
//第二种
var B=new Array();
B[0]=12
B[1]=34
B[2]=56
//第三种
var C=new Array(3);
C[0]=12
C[1]=34
C[2]=56
//第四种
var D=new Array(45,78,89,45);
判断函数:isArray instanceof
var test = [];
test[0] = '1';
test[1] = 'a';
if(Array.isArray(test)){
console.log("success");//success
}
关于遍历:
for in
用于遍历数组键值,可以遍历对象的属性和自定义属性。
var obj = {
name : "test",
age : 18,
}
for(var test in obj){
console.log(test);//name,age
}
var arr = ['a','b','c'];
arr.test = 'test';
for(var key in arr){
console.log(key);//0,1,2,test
}
for of
遍历数组的值,不能遍历对象。不能遍历自定义属性。
var arr = ['a','b','c'];
arr.test = 'test';
for(var key of arr){
console.log(key);//a,b,c
}
foreach
var arr = ['a','b','c'];
arr.test = 'test';
arr.forEach(e => {
console.log(e);//a,b,c
});