JavaScript学习笔记(三)——数据类型及检测方式typeof()

JavaScript数据类型及检测方式typeof()

计算机顾名思义就是可以做数学计算的机器,因此,计算机程序理所当然地可以处理各种数值。但是,计算机能处理的远不止数值,还可以处理文本、图形、音频、视频、网页等各种各样的数据,不同的数据,需要定义不同的数据类型。

1.基本概念

  1. 在编程语言中,能够表示并操作的值(value)的类型,称为数据类型(type);

  2. 变量(variable)是一个值的符号名称,可以通过变量引用值;

  3. 可以把一个值赋值给一个变量, 这样程序在任何需要使用该值的地方,就可以直接引用该变量。

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
 

 

 

 

 

 

 

posted @ 2022-06-05 14:58  小狐狸ya  阅读(111)  评论(0编辑  收藏  举报