JavaScript学习笔记(三)——数据类型及检测方式typeof()
计算机顾名思义就是可以做数学计算的机器,因此,计算机程序理所当然地可以处理各种数值。但是,计算机能处理的远不止数值,还可以处理文本、图形、音频、视频、网页等各种各样的数据,不同的数据,需要定义不同的数据类型。
1.基本概念:
-
-
变量(variable)是一个值的符号名称,可以通过变量引用值;
-
可以把一个值赋值给一个变量, 这样程序在任何需要使用该值的地方,就可以直接引用该变量。
2.数据类型分类:
-
基本数据类型:Number、String、Boolean、NULL、Undefined、Symbol(es6);
-
特殊数据类型:NaN : NAN是属于JavaScript的数值类型Number类型。NaN意思是指数据not a number不是一个数字,但是NAN却属于数值类型。 ;
-
引用数据类型:数组、对象、函数等(在JS中除了基本数据类型以外的都是对象,数据是对象,函数是对象,正则表达式是对象)。
3.五种基本数据类型简介
1.布尔型
布尔型( Boolean)是 JavaScripl中较常用的数据类型之一,通常用于逻辑判断。它只有 true 和 false 两个值,表示事物的“真”和“假”
var flag2 = false;
var flag1 = true;
需要注意的是,JavaScript 中严格遵循大小写,因此 true 和 false 值只有全部为小写时才表示布尔型。
2.数值型
数值型(Number)是最基本的数据类型。与其他程序语言不同的是,JavaScript 中的数值 型并不区分整数和浮点数,所有数字都是数值型。在使用时它还可以添加“-”符号表示负数, 添加“+”符号表示正数(通常情况下省略“+”),或是设置为 NaN 表示非数值,如下:
var oct = 032;//八进制数表示的 26
var dec = 26; //十进制数 26
var hex = 0x1a; //十六进制数表示的 26
var fnum1 = 7.26; //标准格式
var fnum2 =-6.24; // 标准格式
var fnum3 = 3.14E6; //科学计数法格式 3.1410
var fnum4 = 8.96E-3; //科学计数法格式 8.9610-3
3.字符型
String字符串
-在JS 中字符串需要用引号引起 -单引号和双引号都可以但是不能混合使用 -单引号不能嵌套
alert(a);//输出变量
alert(“a”);//输出字符串
4.空型
Null类型的值只有一个,就是null null这个值专门用来表示一个空的对象
5.未定义型
Undefined 类型的值只有一个,就是Undefined 当声明一个变量但是并没有给边浪赋值时返回Undefine 与null不同的是,undefined 表示没有为变量设置值,而 null则表示变量不存在或无效。
6.Symbol类型 (ES6新增)
Symbol 本质上是一种唯一标识符,可用作对象的唯一属性名,这样其他人就不会改写或覆盖你设置的属性值。
console.log(typeof Symbol); //function
声明方法:
let id = Symbol("id“);
Symbol 数据类型的特点是唯一性,即使是用同一个变量生成的值也不相等。
let id1 = Symbol('id');
let id2 = Symbol('id');
console.log(id1 == id2); //false
Symbol 数据类型的另一特点是隐藏性,for···in,object.keys() 不能访问
let id = Symbol("id");
let obj = {
[id]:'symbol'
};
for(let option in obj){
console.log(obj[option]); //空
}
但是也有能够访问的方法:Object.getOwnPropertySymbols Object.getOwnPropertySymbols 方法会返回一个数组,成员是当前对象的所有用作属性名的 Symbol 值。
let id = Symbol("id");
let obj = {
[id]:'symbol'
};
let array = Object.getOwnPropertySymbols(obj);
console.log(array); //[Symbol(id)]
console.log(obj[array[0]]); //'symbol'
虽然这样保证了Symbol的唯一性,但我们不排除希望能够多次使用同一个symbol值的情况。 为此,官方提供了全局注册并登记的方法:Symbol.for()
let name1 = Symbol.for('name'); //检测到未创建后新建
let name2 = Symbol.for('name'); //检测到已创建后返回
console.log(name1 === name2); // true
通过这种方法就可以通过参数值获取到全局的symbol对象了,反之,能不能通过symbol对象获取到参数值呢? 是可以的 ,通过Symbol.keyFor()
let name1 = Symbol.for('name');
let name2 = Symbol.for('name');
console.log(Symbol.keyFor(name1)); // 'name'
console.log(Symbol.keyFor(name2)); // 'name'
4. typeof 操作符
鉴于 ECMAScript 是松散类型的,因此需要有一种手段来检测给定变量的数据类型——typeof 就是负责提供这方面信息的操作符。对一个值使用 typeof 操作符可能返回下列某个字符串:
-
"undefined"——如果这个值未定义;
-
"boolean"——如果这个值是布尔值;
-
"string"——如果这个值是字符串;
-
"number"——如果这个值是数值;
-
"object"——如果这个值是对象或 null;
-
"function"——如果这个值是函数。
使用 typeof 操作符的例子:
<!DOCTYPE html>
<html>
<head>
<title>typeof Example</title>
<script type="text/javascript">
var message = "some string";
alert(typeof message); //"string"
alert(typeof(message));
alert(typeof 95); //"number"
console.log(typeof typeof 95); //string
//这里要注意的是:typeof本身是字符串,所以当他被typeof检测时 ,返回的是string。
</script>
</head>
<body>
</body>
</html>
-
typeof操作符的操作数可以是变量(message),也可以是数值字面量。
-
typeof是一个操作符而不是函数,因此例子中typeof之后的圆括号尽管可以使用,但不是必需的。
null 有时会被当作一种对象类型,但是这其实只是语言本身的一个 bug,即对 null 执行typeof null 时会返回字符串 "object"。实际上,null 本身是基本类型。
数据类型在底层都是以二进制形式表示的,二进制的前三位为 0 会被 typeof 判定为对象类型,null为全0所以会被误判为"object",
-
000 - 对象,数据是对象的应用
-
1 - 整型,数据是31位带符号整数
-
010 - 双精度类型,数据是双精度数字
-
100 - 字符串,数据是字符串
-
110 - 布尔类型,数据是布尔值
从技术角度讲,函数在 ECMAScript 中是对象,不是一种数据类型。然而,函数也确实有一些特殊的属性,因此通过 typeof 操作符来区分函数和其他对象是有必要的。
注:面试题--typeof 返回值
//返回值类型
console.log(typeof typeof 95); //string
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· 提示词工程——AI应用必不可少的技术
· 字符编码:从基础到乱码解决
· 地球OL攻略 —— 某应届生求职总结