javascript是弱类型语言。即,一个变量可以赋不同数据类型的值。javascript允许变量类型的隐式转换,允许强制类型转换等,如字符串和数值可以自动转化;而强类型语言一般不允许这么做。
在JavaScript里 变量均为对象。当声明一个变量时,就创建了一个新的对象;
基本类型:字符串(String)、数字(Number)、布尔(Boolean)、对空(Null)、未定义(Undefined)、Symbol(注:Symbol 是 ES6 引入了一种新的原始数据类型,表示独一无二的值。)。
对象类型:对象(Object)、数组(Array)、函数(Function),还有两个特殊的对象:正则(RegExp)和日期(Date)。
let x; // x 为 undefined
let x = 5; // 现在 x 为数字
let x1 = 34.00; // 小数点 也是数字类型
let x ="John";// 现在 x 为字符串
let x = ["Q","C",1,3];// 数组 可以直接
let x = {name:'leo',age:17};// 对象
let t =function(){}// 函数 function
// 变量类型的隐式转换
let x1 =5;// 定义时是 typeof x1 number
x1 ='json';// 通过赋值string 变成了 typeof x1 string
// 数组定义
let arr = [];
or
let arr =newArray();
cars[0]="Saab";// 为数组第一项赋值
or
let arr = ["Saab"]
// 对象定义与数组类似
let arr = {};
or
let arr =newObject();
cars['name']="Saab";// 为对象添加key-value
or
let arr = {name:"Saab"}
变量的数据类型可以使用 typeof
typeof "leo"// 返回 string
typeof 2.67// 返回 number
typeof true// 返回 boolean
typeof ["Q","C"]// 返回 object
typeof {name:'leo', age:17}// 返回 object
typeof function(){}// 返回 function
typeof null// 返回 object//
注:typeof 数组与对象,null都返回,object
// 如何区分他三呢?
let n =null;
console.log(n ===null);// true
// 判断数组
1,instanceof
var arr = [1,2,3,1];
console.log(arr instanceof Array);// true
2,constructor
var arr = [1,2,3,1];
console.log(arr.constructor=== Array);// true
3,Object.prototype.toString
function isArrayFn(o){
return Object.prototype.toString.call(o) ==='[object Array]';
}
var arr = [1,2,3,1];
console.log(isArrayFn(arr));// true
4,es5 新增Array.isArray()
var arr = [1,2,3,1];
console.log(Array.isArray(arr));// true
// 补充几个判断 null/object/array 的工具类
// 通过 typeof
var getDataType = function(o){
if(o===null){
return'null';
} else if (typeof o =='object'){
if(typeof o.length =='number'){
return 'Array';
}else{
return 'Object';
}
}else{
return 'param is no object type';
}
}
// 通过instanceof
var getDataType =function(o){
if(o===null){
return'null';
}
if(o instanceof Array){
return 'Array'
}else if( o instanceof Object){
return'Object';
}else{
return'param is no object type';
}
};
补充let,var,const区别
三者都是定义变量,var/let 定义可变变量,区别在于,var 会变量提升,var允许重复声明,而let不允许重复声明,具体参看下面示例;const 定义不可变变量
//变量提升
console.log(a);// undefined
var a =13;
var a =14;
// 相当于
var a;// 只声明没有赋值,默认为undefined
console.log(a);
a =13;
//不允许重复声明
let a =12
console.log(a)
let a =13// => 此行出错:SyntaxError: Identifier 'a' has already been declared
console.log(a)
var a =12
let a =13// => SyntaxError: Identifier 'a' has already been declaredconsole.log(a)
let a =13
var a =12// => SyntaxError: Identifier 'a' has already been declaredconsole.log(a)
// const
const a =1;
a =2;// 报错,不可修改const 的值