数据类型
javascript数据类型主要分两大类
值类型(基本类型):字符串(String)、数字(Number)、布尔(Boolean)、未定义(Undefined)、Symbo、Bigint。
Symbol 是 ES6 引入了一种新的原始数据类型,表示独一无二的值。
引用数据类型:对象(Object)、数组(Array)、函数(Function),空(Null)
JavaScript 拥有动态类型
JavaScript 拥有动态类型。这意味着相同的变量可用作不同的类型:
var x; // x 为 undefined var x = 5; // 现在 x 为数字 var x = "John"; // 现在 x 为字符串
一 先说一下javascript有几种数据类型吧
基本数据类型有:
Number:按照数字精度分为整数int,单精度float,双精度double;按照数字的表示方法分为二进制Binary,八进制Octal,十进制Decimal system,十六进制Hexadecimal。但是JS中所有数字统一使用Number来表示(充分体现JS弱类型语言的特点:类型细分不明显)。
var a=2;
var a=2.1;
var a=0X10;
var a=010;
typeOf a; //number,用于类型检测
//NaN(not a number)
var result = 10/'a' //result: number类型
console.log(result ); // NaN
console.log(isNaN(result)); //true
//Infinity、-Infinity(无穷大)
var result = 10/0; //Infinity
var result = -10/0; //-Infinity
console.log(isFinite(result)); //false
String:String表示由零个或者多个16位Unicode字符组成的字符序列,即字符串。通常用单引号 / 双引号 / 反引号括起来,或者结合嵌套使用。
var a="hello world";
var a='hello world';
var a='
<ul>
<li>terry</li>
<li>larry</li>
</ul>
'; //反引号会打印出换行
var json='{"name":"terry", "age":12}'; //json字符串可以解析输出成对象,会有高亮显示
console.log(JSON.parse(json));
Boolean:布尔类型,取值为true / false,通常用于条件判断。
var a = true;
var a = false;
undefined:未定义类型只有一个值:undefined。对未声明和未初始化的变量执行typeof操作符都返回undefined。
var a;
var a = undefined;
基本数据类型以类似键值对的形式保存在栈区。
引用数据类型(指针)有:
在JS中除了以上基本数据类型之外的其他所有类型都可以归结为引用数据类型。变量的引用地址保存在栈区,真正的值保存在堆区。
var a = {name:"terry",age:12};//object
var a = [18812344321,15912344321];//object
var a = function add(a,b){
return a + b;
};//function
var a = /[abc]def/i;//object
Null:空类型,空引用数据类型,当前变量为空对象,将来可能会保存一个对象。
var a = null; typeof a; //输出'object'
由于null不能调用对象的任何属性和方法,所以不把null归到对象里,用typeof检测a时,输出的结果是’object’,而不是’null’。
object:对象
function:函数
Array:数组
New Date():
隐式创建
var arr=["Audi","BMW","Volvo"];
直接实例化
var arr=new Array("Audi","BMW","Volvo");
创建数组并给数组元素赋值
var arr=new Array(); //先创建一个空数组,再给数组元素赋值 arr[0]="Audi"; arr[1]="BMW"; arr[2]="Volvo";
注意:
console.log(arr.length); //3 arr[4]='jeep'; console.log(arr.length); //5 console.log(arr[3]); //undefined
对象:
对象由花括号分隔。在括号内部,对象的属性以名称和值对的形式 (name : value) 来定义。属性由逗号分隔:
var person={firstname:"John", lastname:"Doe", id:5566};
上面例子中的对象 (person) 有三个属性:firstname、lastname 以及 id。
也可先创建对象再追加属性和方法
var people = new Object(); people.name = 'Tom'; people.age = 21; people.eat = function(){ }
空格和折行无关紧要。声明可横跨多行:
var person={ firstname : "John", lastname : "Doe", id : 5566 };
对象属性有两种寻址方式:
name=person.lastname; name=person["lastname"];
会发生数据类型转换的场景总结:
1、字符串拼接;例如:a = 10 + "100";
2、==判断;例如:if(10="10"){}
3、if流程控制;
4、逻辑运算。
数据类型检测
typeof
typeof "hello world" // 返回 "string" typeof 3.14 // 返回 "number" typeof NaN // 返回 "number" typeof false // 返回 "boolean" typeof [1,2,3,4] // 返回 "object" typeof {name:'zevin', age:21} // 返回 "object" typeof new Date() // 返回 "object" typeof function () {} // 返回 "function" typeof a // 返回 "undefined" typeof null // 返回 "object"
typeof只能判断值类型数据的类型,另外可以判断function类型,作为引用类型,function是javascript中极其重要的一种数据类型,所以特意让typeof有这个能力。
如果想检测引用类型中的类型,则需要instanceof。
isNaN
isFinite
一元加(+)运算符
+3 // 3 +true // 1 +'2' // 1 +'a' // NaN +null // 0 +undefined // NaN +[] // 0 +{} // NaN
一元减(-)运算符
-3 // -3 -true // -1 -'2' // -2 -'a' // NaN -null // -0 -undefined // NaN -[] // -0 -{} // NaN