卖坚果的怪叔叔 卖坚果的怪叔叔
  • 首页
  • 生活
  • 技术
  • 记录
  • 工具箱
  • 关于我
首页 › 技术 › 重学JavaScript之基本概念(上) => 数据类型

重学JavaScript之基本概念(上) => 数据类型

坚果大叔
2019-06-02 17:44:05技术阅读 2,849

前提:任何语言的核心都会描述这门语言最基本的工作原理,通常描述的内容会涉及到这门语言的语法 、操作符、数据类型、内置功能等用于构建复杂解决方案的基本概念。

1. 语法

1、js 中的变量、函数名和操作符都区分大小写,
2、另外一些像typeof这些关键字也不能使用

2. 标识符

所谓标识符就是指变量、函数、属性的名字,或者函数的参数。

标识符的写法标准如下:

1、第一个字符必须是一个字母、下划线或者一个美元符号
2、其他字符可以是字母、下划线、美元符号或数字
3、标识符中的字母采用驼峰大小写格式,例如:firstSecond、myCar

3. 注释

js的注释包括单行注释和块级注释,单行注释两个反斜杠开头,块级注释则是以(/)开始以(/)结束

单行注释

// 注释

块级注释

/*
    块级注释
*/

4. 语句

在js中语句是以分毫结尾但是不是必须的,但是推荐还是写上分号。因为这样在压缩代码的时候就不会出现不必要的问题。

5. 关键字和保留字

在js中有一些特定的关键字,这些关键字可用于表示控制语句的开始或结束,或者用于执行特定操作等,关键字是语言特地保留的,所以不能用作标识符。另外在js中还有另外一些保留字,也是不能用来当作标识符。

6. 变量

因为js的变量是松散类型的,松散类型就是可以用来保存任何类型的数据。每个变量仅仅是用来保存值的占位符而已,定义变量需要用到var,在之后的ES6中增加了let和const关键字来定义变量。

var a = 10 // 定义一个变量a 给它赋值 10

注意:虽然省略 var 操作符可以定义全局变量,但是并不推荐这种做法,因为在局部作用域中定义全局变量会使得代码很难维护。

7. 数据类型

在js中有5种基本数据类型:Undefined、Null、Boolean、Number和String,复杂类型 Object。Object是一组由无序的名值对组成的。在ES中不支持任何创建自定义类型的机制。

8. typeof操作符

用来检测给定变量的数据类型,检测的返回值如下:

undefined -- 值未定义
Boolean -- 布尔值
string -- 字符串
number -- 数值
object -- 对象或者null
function -- 函数

typeof操作符的操作数可以是变量,也可以是数值字面量,typeof是一个操作符而不是函数。

9. undefined

它只有一个特殊类型的值即undefined,如果变量在var后没有赋值,那么这个变量的值就是 undefined。

var message;
message // undefined

注意:未初始化的变量和未赋值的变量 typeof之后都是undefined,所以为了更好的判断undefined的来源到底是未赋值还是未初始化,建议所有的值都声明在使用。

10. null类型

null 是第二个只有一个值的数据类型,值为 null,从表面看 null 表示的是一个空对象指针,而这个真是typeof 检测 null 返回值为 “object”的原因。

如果你想定义一个变量用来保存对象,那么最好的做法就是将变量赋值 null 这样检测 null 就知道 相应的变量是否保存了一个对象的引用。

注意:null == undefined 为 true,尽管这样两者的用途并不相同。无论任何情况下都没有必要将一个变量的值显式的设置为 undefined,而null则是如果保存对象的变量没有真正保存对象,那么就应该明确的让变量保存null值。这样可以进一步的区分 null 和 undefined。

11. Boolean类型

boolean类型有两个字面值:ture 和 false,另外这两个值和数字值不是一回事,ture 不一定等于1,false也不一定等于0.

注意:true 和 false 是区分大小写的,True 和 Flase 只是标识符。

我们可以通过函数 Boolean() 将一个值转换为Boolean类型。 如下:

var message = 'haha,nihao';
var zh = Boolean(message)

各种类型的转换规则如下:

数据类型 转换为true的值 转换为false的值
Boolean true false
String 任何非空字符串 "" (空字符串)
Number 任何非零数字值(包括无穷大) 0 和 NaN
Object 任何对象 null
Undefined 不适用 undefined

12. number类型

在js中广泛使用的数据类型,有整数和浮点数值。可以通过十进制、八进制、十六进制的字面来表示。

var bjz = 070   // 八进制 56
var sjz = 56    // 十进制 56
var sljz = 0xA  // 十六进制 10

12.1 浮点数值

就是该数值中必须包含一个小数点,并且小数点后面至少有一位数字。

var f = 1.1

注意:由于保存浮点数的内存空间是保存整数的两倍,所以以下情况会自动将浮点转换为整数保存,如下:

var f = 1.  // 小数点后没有数字 保存为 1
var b = 10.0 // 保存为 10

另外对于 过大 或者过小的值可以通过 e(科学计数法)表示,如下:

var f = 3.125e7   // 3.125 * 10^7 => 31250000
var f = 3e-17     // js 会将小数点后面超过6个0的浮点数值转换为科学计数法

注意:0.1 + 0.2 != 0.3

12.2 数值范围

js中由于内存的限制并不能保存所有的数值,js能够表示的最小值为 5e-324,最大值为 1.7976931348623157e + 308。如果某次计算数值超过最大 就转换为Infinity,最小为 -Infinity。如果出现这两个值,那么该值就不能在参与之后的运算了。

12.3 NaN

js 中的非数值,是一个特殊的值。主要是为了防止抛出错误,用来表示一个本来返回数值的操作数未返回数值的情况。

NaN 有两个特定,1、任何涉及NaN的操作都会返回NaN,2、NaN与任何值都不相等包括其本身。针对这两个特点,ES定义了isNaN() 函数,这个函数接受一个参数,该参数可以是任何类型,而该函数会帮我们确定这个参数是否 “不是数值”,isNaN()接受参数之后会尝试将这个值转换为数值,某些不是数值的值会直接转为数值。如下:

isNaN(NaN)      // true
isNaN(10)       // false (10是一个数值)
isNaN("10")     // false (可以被转换成数值10)
isNaN('blue')   // true (不能转换成数值)
isNaN(true)     // flase (可以被转换成数值 1)

注意:isNaN()也可以用于对象,在基于对象调用的时候,首先会调用 valueOf()方法,然后确定该方法的返回值是否可以转换为数值,如果不能则基于这个返回值在调用 toString() 方法,在测试返回值。

12.4 数值转换

有3个函数可以把非数值转换为数值:Number()、parseInt()、parseFloat(),第一个函数可以用于任何数据类型。另外两个函数用于将字符串转换为数值。

Number()转换规则如下:
    Boolean值  => true or flase => 1 or 0
    number => 传入和返回
    null => 返回 0 
    undefined => 返回null
    字符串
        如果包含十进制数值 则 '123' => 123 ,'012' => 12
        如果是浮点字符串 则 '1.1' => 1.1 , '01.1' => 1.1
        如果包含十六进制 则 '0xf' => 相同的十进制
        如果为空 则 '' => 0
        如果包含除了上述格式 则 '' => NaN
        如果是对象,则调用对象的 valueOf()方法,在按照之前的规则转换返回值,
    如果转换对象是NaN,则调用对象的 toString() 方法,在按照之前的规则返回字符串
    值。

parseInt()转换规则如下:
    它会忽略字符串前面的空格,如果第一个字符不是数字或者负号则返回NaN。
    如果是其他进制,则转换为响应的十进制数值。

    var n = parseInt('1234blue')    => 1234
    var m = parseInt('')            => NaN

parseFloat()转换规则如下:
    从第一个字符开始解析每个字符,知道遇到第一个无效的浮点数字字符为止
    也就是说字符串中第一个小数点是有效的,第二个小数点就无效的了。因此
    它后面的字符串就被忽略了。

    var n = parseFloat('1234blue')    => 1234
    var m = parseFloat('0xA')         => 0
    var c = parseFloat('22.21.2')     => 22.21
    var b = parseFloat('22.4')        => 22.4

13. string类型

用于表示由零或者多个16位 Unicode字符组成的字符序列,即字符串。由双引号("")或者单引号 ('')包裹而成

var a = '124'
var b = "123"

// 注意:双引号开头必须双引号结尾!

13.1 字符字面量

一些特殊的字符字面量,即转义序列。用于表示非打印字符,或者具有其他用途的字符。

字面量 含义
\n 换行
\t 制表
\b 空格
\r 回车
\f 进纸
\ 斜杠
\' 单引号
\" 双引号

这些字符可以出现在字符串冲的任意位置,而且也会被当作一个字符来解析。

任何字符串的长度都可以通过 length 属性来获取。

let b = '1kljk'
b.length // 5

13.2 字符串的特点

在 ES 中字符串是不可变的。字符串一旦被创建,它的值将不能被改变。如果要改变某个字符串的值则需要销毁原本的值,在重新赋值

var lang = 'shanghai'
lang = lang + 'daxue'

// shanghaidaxue

13.3 转换为字符串

如果想将一个值转换为字符串有两种方法。一、通过toString(),如下:

var age = 11;
var agestring = age.toString() // '11'
var b = true
var bstring = b.toString() // 'true'

大多数数据类型(数值、布尔值、对象和字符串值)都有 toString方法,但是 null 和 undefined 没有。大多数情况下 toString 是不需要传递参数的。默认是以十进制格式返回数值的字符串表示。但是其实是可以传递八进制、二进制、十六进制参数的。

var num = 10;
num.toString()      // '10'
num.toString(2)     // '1010'
num.toString(8)     // '12'
num.toString(10)    // '10'
num.toString(16)    // 'a'

14. object类型

对象是一组数据和功能的集合。对象可以通过执行 new 操作符后跟要创建的对象类型的名称来创建。创建的object类型的实例,可以为其添加属性和方法。

var o = new Object()

在ES中 Object类型是所有它的实例的基础,Object类型所具有的任何属性和方法也同样存在于更具体的对象中。

Object的每个实例都具有下列属性和方法:

constructor => 保存用于创建当前对象的函数

hasOwnProperty(propertyName)=> 用于检查给定的属性在当前对象实例中是否存在。propertyName必须以字符串形式指定。

isPrototypeOf(object) => 用于检查传入的对象是否是另一个对象的原型。

propertyIsEnumerable(propertyName) => 用于检查给的属性是否能够使用 for-in语句来枚举,与hasOwnProperty()方法一样,作为参数的属性名必须以字符串指定。

toString() => 返回对象的字符串表示

valueOf() => 返回对象的字符串、数值或布尔值表示。·

字符串 数据类型
赞赏 赞(0)
本文系作者 @坚果大叔 原创发布在 卖坚果的怪叔叔。未经许可,禁止转载。
Node.js内置模块
上一篇
周末,天气很棒,瞎溜达
下一篇
在小程序中查看

这是个😊,挣点服务器费用😜

热门文章
如何在Linux服务器部署自己的网站?
嗦鸭头~
Vue如何刷新当前页面?我是这样做的,你呢?
Md5引发的血案
element-ui 控制台 『 Prop being mutated: "placement" 』的报错~
初春里的🌸
专题标签
agent (1) CSS (15) dom (1) Es6入门系列 (14) Git (3) html (1) iview (1) JavaScript (9) js (4) Lif (1) Node (4) pyecharts (1) Python (10) ref (1) scriptable (1) Skill (1) vsCode (1) vue (4) wordpress (2) 三月 (1) 上海 (1) 假期 (1) 其他分享 (3) 前端两三问 (15) 古镇 (1) 外滩 (1) 对象 (1) 小程序 (5) 年度总结 (6) 年终总结 (1) 微信机器人 (4) 打字机 (1) 技术 (1) 日常问题 (8) 日常问题记录 (1) 春天 (2) 服务器 (2) 海族馆 (1) 生活 (8) 网上国网 (1) 记录 (3) 通勤 (1) 重学JavaScript (11) 面试题 (10) 🌸 (1)
什么是Agent?
2026-08-15 23:49:12
325 0 1
什么是 Skill?
2026-08-12 21:32:42
286 1 0
失业在家,我给小朋友做了一个练字小程序!
2026-08-07 16:21:52
527 8 1
上线8年,15万用户的小程序,一共赚了多少钱?
2026-05-30 18:01:24
4,615 4 0
  • 0
博主

一位佛系的前端开发者,略通摄影,乐于尝试新事物,热衷于美食。

友链
故事胶片
公众号
坚果大叔 执行上下文 卖坚果的怪叔叔 Dacking
Copyright © 2017-2026 卖坚果的怪叔叔

开往-友链接力

萌ICP备20230818号

苏ICP备18048410号-3
  • 首页
  • 生活
  • 技术
  • 记录
  • 工具箱
  • 关于我
# CSS # # JavaScript # # vue # # 微信 # # 生活 #
坚果大叔
345
文章
170
评论
431
喜欢