JS的7种基本数据类型和3种对象类型,以及它们(主要Number和String)的一些方法和属性的说明;常见的布尔值转换表。
发布日期:2021-06-29 11:42:48 浏览次数:2 分类:技术文章

本文共 5815 字,大约阅读时间需要 19 分钟。

JavaScript 数据类型

JavaScript 中有五种可包含值的数据类型

  • 字符串(string)
  • 数字(number)
  • 布尔(boolean)
  • Symbol(Symbol 是 ES6 引入了一种新的原始数据类型,表示独一无二的值)。
  • 函数(function)

同时有两种不能包含值的数据类型

  • null
  • undefined

有三种对象类型

  • 对象(Object)
  • 日期(Date)
  • 数组(Array) 

如果一个变量是数据类型,那么在它被赋值之后,这个值就是不可变的。

JavaScript 拥有动态类型。这意味着相同的变量可用作不同的类型:

var x;               // x 为 undefinedvar x = 5;           // 现在 x 为数字var x = "John";      // 现在 x 为字符串

 JavaScript 数值始终是 64 位的浮点数。与许多其他编程语言不同,JavaScript 不会定义不同类型的数,比如整数、短的、长的、浮点的等等。JavaScript 数值始终以双精度浮点数来存储。整数(不使用指数或科学计数法)会被精确到 15 位。小数的最大数是 17 位,但是浮点的算数并不总是 100% 精准:

var x = 999999999999999;   // x 将是 999999999999999,15个数var y = 9999999999999999;  // y 将是 10000000000000000,17个数,由原来的16位进一位var x = 0.2 + 0.1;         // x 将是 0.30000000000000004// 使用乘除法有助于解决上面的问题var x = (0.2 * 10 + 0.1 * 10) / 10;       // x 将是 0.3

1.JavaScript不区分整数和浮点数,统一用Number表示,以下都是合法的Number类型

123; // 整数1230.456; // 浮点数0.4561.2345e3; // 科学计数法表示1.2345x1000,等同于1234.5-99; // 负数NaN; // NaN表示Not a Number,当无法计算结果时用NaN表示;Infinity; // Infinity表示无限大,当数值超过了JavaScript的Number所能表示的最大值时,就表示为Infinity

 1.1 NaN的特点

  • NaN和任何值进行操作都会返回NaN
  • NaN与任何值都不相等,包括NaN本身
console.log(NaN === NaN)  //返回false,始终坚持使用===来进行比较

 1.2 isNaN()函数:

  • isNaN意思是:是不是非数值,是的话返回true,所有能被该函数转换能Number类型的值,都返回false
  • 在使用isNaN进行检测的时候,首先会验证检测的值是否为数字类型,如果不是,先基于Number()这个方法,把值转换成数字类型,然后再检测。
  • 空字符串、空数组、布尔值、null会转成数值,所以isNaN函数返回false
  • 空对象、函数、undefined不能转换成数值,返回true
console.log( isNaN(NaN ) // true console.log( isNaN(10 ) // falseconsole.log( isNaN('10') // falseconsole.log( isNaN('blue') // trueconsole.log(isNaN( true )) // false (true会被转换成1)

 1.3 数值转换函数

  • Number()
  • parseInt() 取整
  • parseFloat() 浮点数

 1.3.1 Number()转换规则:

  • 如果是布尔值,truefalse会被转换为10
  • 如果是数字,只是简单的传入和返回。
  • 如果是null值,返回0
  • 如果是undefined,返回NaN
  • 如果是字符串:
  1. 字符串中只包含数字(包括前面带正/负号的情况),则将其转换为十进制数值,数字前面有0的会被忽略(不管前面有几个0,全部忽略),例如"010"会转换成10
  2. 字符串中包含有效的浮点格式,如"1.1",则将其转换为对应的浮点数值。
  3. 字符串中包含有效的十六进制格式(一般用数字09和字母AF(或a~f)表示,其中:A~F表示10~15,这些称作十六进制数字),如"0xf",将其转换成相同大小的十进制整数值。
  4. 字符串为空,转换成0
  5. 字符串中包含除了以上格式之外的字符,则转换为NaN,如字符串中既有数字又有字母的情况。
  • 如果对象,调用对象的valueOf(),空数组返回0,空对象返回NaN。

 1.3.2 parseInt(string,radix)将一个字符串转换成x进制的整数。

  • 第一个参数为字符串,如果参数不是字符串,则将其转换为字符串(使用 ToString 抽象操作)。字符串开头的空白符将会被忽略。如果是小数则会采取直接取整数部分结果。
  • 第二个参数为整数,表示按照xx进制转换,如传入参数10表示按十进制规则转换。
  • 第一个参数从左到右依次查找有效数字字符,直到遇到非有效数字字符,停止查找(只能出现在开头,不管后面是否好友数字),把找到的当做数字返回。如果字符串中以0x开头且后跟数字字符,就会将其当做一个十六进制整数。如果字符串以"0"开头且后跟数字字符,则会被当做一个八进制数来解析。

  • 如果不传第二个参数,默认会按照八进制解析。在大多数情况下,我们要解析的都是十进制数值,因此始终将10作为第二个参数是非常必要的。

1.3.3  parseFloat(string)

解析一个参数(必要时先转换为字符串)并返回一个浮点数。默认解析十进制值。

  • 从左到右依次解析字符,一直解析到字符串末尾,遇到非数字字符会或遇到第二个浮点数(在这之前的字符串都会被解析)会使解析停止,如"3.14"解析成3.14"3.14.1234"解析成3.14

2.所有用单引号、双引号、反引号包起来的都是String字符串数据类型。

2.1把其他类型转换成字符串

  • [val].toString()

2.2 字符串相关操作

  • 字符串拼接两种方式
  • length属性返回字符串的长度
var txt = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";var sln = txt.length; // 返回26
  • toUpperCase()方法将字符串转换为大写
  • toLowerCase()方法将字符串转换为小写

  • indexOf()方法返回字符串中指定文本首次出现的索引(位置)

  • lastIndexOf()方法返回指定文本在字符串中最后一次出现的索引。如果没找到,都返回-1
var a = "The full name of China is the People's Republic of China.";var pos = a.indexOf("China");  // 返回17var poslt = a.lastindexOf("China"); //返回51// 两种方法都接受作为检索起始位置的第二个参数var pos = a.indexOf("China",18);  // 返回51,从前往后var poslt = a.lastIndexOf("China",50); // 返回17,从后向前var noresult = a.indexOf('Cchina'); //返回-1,检索不存在
  • slice()方法提取字符串的某个部分并在新字符串中返回被提取的部分。
// 该方法设置两个参数:起始索引(开始位置),终止索引(结束位置)。var str = "Apple, Banana, Mango";var res = str.slice(7,13);  // 返回Banana// 如果某个参数为负,则从字符串的结尾开始计数。var str = "Apple, Banana, Mango";var res = str.slice(-13,-7);  // 返回Banana// 如果省略第二个参数,则该方法将裁剪字符串的剩余部分。var res = str.slice(7);  // 返回Banana, Mango// 从结尾计数到剩余部分。var res = str.slice(-13); //  返回Banana, Mangovar res = a.substring(7,13); // 返回Bananavar res = a.substr(7,13); // 返回起始位置为7长度为13的子字符串Banana, Mango
  • substring()方法 类似于 slice()。不同之处在于 substring() 无法接受负的索引。
  • substr() 类似于 slice()。不同之处在于第二个参数规定被提取部分的长度。如果省略第二个参数,则该 substr() 将裁剪字符串的剩余部分。
  • replace()方法不会改变调用它的字符串。它返回的是新字符串。默认地,replace() 只替换首个匹配;默认地,replace() 对大小写敏感。
str = "Please visit Microsoft and Microsoft!";var n = str.replace("Microsoft", "W3School");  // 结果为Please visit W3School and Microsoft!var n = str.replace("MICROSOFT", "W3School"); // 结果为Please visit Microsoft and Microsoft!/*使用正则表达式,来替换默认的设置,请注意正则表达式不带引号*/var n = str.replace(/MICROSOFT/i, "W3School"); // 正则表达式 /i(大小写不敏感),结果为Please visit W3School and Microsoft!var n = str.replace(/Microsoft/g, "W3School");// 正则表达式的 g 标志(用于全局搜索)替换全部,结果为Please visit W3School and W3School!
  • trim() 方法删除字符串两端的空白符
  • 字符串元素访问比如str[3]
  1. 不适用 Internet Explorer 7 或更早的版本
  2. 它让字符串看起来像是数组(其实并不是)
  3. 如果找不到字符,[ ] 返回 undefined,而 charAt() 返回空字符串。
  4. 它是只读的。str[0] = "A" 不会产生错误(但也不会工作!)
    var str = "HELLO WORLD";str[0] = "A";             // 不产生错误,但不会工作str[0];                   // 返回 H,因为不能修改,是不可变数据类型

3.布尔值

布尔值和布尔代数的表示完全一致,一个布尔值只有truefalse(小写)两种值,要么是true,要么是false,可以直接用truefalse表示布尔值,也可以通过布尔运算计算出来。

逻辑运算符:&&(与),||(或),!(非)

JavaScript允许对任意数据类型做比较;JavaScript在设计时,相等运算符有两种比较运算符:

第一种是==比较,它会自动转换数据类型再比较,很多时候,会得到非常诡异的结果;

第二种是===比较,它不会自动转换数据类型,如果数据类型不一致,返回false,如果一致,再比较。

由于JavaScript这个设计缺陷,不要使用==比较,始终坚持使用===比较

false == 0; // true  两个等号,先转换类型再比较false === 0; // false  三个等号,类型不一致立刻返回,若一致再比较值

注意浮点数的相等比较:这不是JavaScript的设计缺陷。浮点数在运算过程中会产生误差,因为计算机无法精确表示无限循环小数。要比较两个浮点数是否相等,只能计算它们之差的绝对值,看是否小于某个阈值。

1 / 3 === (1 - 2 / 3); // falseMath.abs(1 / 3 - (1 - 2 / 3)) < 0.0000001; // true

4. null和undefined

null表示一个“空”的值,它和0以及空字符串''不同,0是一个数值,''表示长度为0的字符串,而null表示“空”。JavaScript的设计者希望用null表示一个空的值,而undefined表示值未定义。事实证明,这并没有什么卵用,区分两者的意义不大。大多数情况下,我们都应该用nullundefined仅仅在判断函数参数是否传递的情况下有用。

5.对象

JavaScript的对象是一组由键-值组成的无序集合。JavaScript对象的键都是字符串类型,值可以是任意数据类型。每个键又称为对象的属性。要获取一个对象的属性,我们用对象变量.属性名的方式。

var person = {    name: 'Bob',    age: 20,    tags: ['js', 'web', 'mobile'],    city: 'Beijing',    hasCar: true,    zipcode: null};person.name; // 'Bob'person.zipcode; // null

6.数组

数组是一组按顺序排列的集合,集合的每个值称为元素。JavaScript的数组可以包括任意数据类型。数组用[]表示,元素之间用,分隔。出于代码的可读性考虑,强烈建议直接使用[]

// 两种创建数组的方法a=[1, 2, 3.14, 'Hello', null, true];a=new Array(1, 2, 3.14, 'Hello', null, true);

 

 

 

 

 

 

 

 

 

转载地址:https://blog.csdn.net/zz2230633069/article/details/108193479 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:JS的变量,使用strict模式
下一篇:JS的语句标识,注释,区分大小写

发表评论

最新留言

做的很好,不错不错
[***.243.131.199]2024年04月25日 00时28分31秒