领先的免费Web技术教程,涵盖HTML到ASP.NET

网站首页 > 知识剖析 正文

JavaScript 数据类型

nixiaole 2024-12-03 17:14:25 知识剖析 15 ℃

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 = new Array();
cars[0]="Saab"; // 为数组第一项赋值
or
let arr = ["Saab"]

// 对象定义与数组类似
let arr = {};
or 
let arr = new Object();
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 declared
console.log(a)

let a = 13
var a = 12  // => SyntaxError: Identifier 'a' has already been declared
console.log(a)

// const 
const a = 1;
a = 2; // 报错,不可修改const 的值
最近发表
标签列表