JavaScript类型值和变量

本文档详细介绍了JavaScript中的基本数据类型(数值、字符串、布尔值、null、undefined、符号)、类型转换、变量声明与转换规则,以及对象与原始值的区别。重点讲解了变量作用域、算数溢出、类型判断和解构赋值等内容,适合开发者快速回顾和查阅。
摘要由CSDN通过智能技术生成

前言

记录JacaScript关于数据类型,作用域的重点易忘笔记

一、概述与定义

  1. 数据类型分为原始类型和对象类型
  2. 属性的集合称之为对象
  3. nullundefined也是原始类型,没有方法。值唯一并且不可修改
  4. ES6新增Symbol类型
  5. 常量声明const,变量let(老版本var),声明是无类型的,不影响赋什么类型的值,Java按照类型声明
  6. JavaScript会自动做类型转换,在需要字符串的地方会自动把数据转换成字符串,需要数值的地方自动把数据转换成数值

二、数值

  1. 取值范围:约正9000兆至负9000兆
  2. 数值字面值可使用分隔符let i = 1_000_000;

1.整数字面量

  1. 整数字面量可以用10进制,16进制,2,8进制的任意数表示
  let i = 0xff;

  console.log(i);//255

2. 浮点数字面量

  1. 为什么不用浮点数进行计算
    解释:计算机的浮点格式只能表示有限个实数,而实数是无限的,所以我们操作的不是一个精切的实数,而是通过舍入后无限接近于当前实数的数。所以0.5-0.2不一定等于0.4-0.1
console.log((0.3 - 0.2) === (0.2 - 0.1));//false

3.JavaScript中的算数

  1. 包括基本的+ - * / %,以及Math类提供的各种方法来进行数学计算
  2. 在算术运算时发生的两种溢出

上溢出:算数结果超出取值范围(或者除以0时)。不会发生错误,而是显示无穷值,即:+/-Infinity

下溢出:JavaScript中最接近0的数为Number.MIN_VALUE,当结果比这个值还接近0时,返回+/-0

  1. NaN,与1,2,3也是一个Number类型,但是表示的含义为 Not a Number。任何无法转换成数值的数据做算数操作结果都是NaN。它与任何值都不相等,包括自己。需要Number.isNaN(x)判断
  2. NaNInfinity为全局常量,只会在做数学运算时产生这两个值(老是弄不清楚在什么时候产生)
  3. 在JavaScript中,-0于0相等

三、字符串

  1. 空串长度为0
  2. 字符串可以用'' , "" , 反引号(``)包裹
  3. 字符串行尾添加反斜杠可以把字符串分行

1.字符串模板字面量

  1. 使用模板字面量需要反引号,反引号内可以是任何表达式,而最终的字符串就是表达式所求的值
  let name = 'li';

  function fun() { return 'zs' }

  let n = `${name}`// n = 'li' 

  let n = `${fun()}`// n = z

四、布尔值

  1. 6种假性值可以转换成布尔值false,undefined,null, 0, -0, NaN, ""
  2. 布尔值只有一个toString()方法,用来将值转换成字符串

五、null与undefined

  1. null值是Null类型的唯一成员,null表示的含义为’对象为空’
  2. 变量未初始化,数组的元素和对象的属性不存在时去访问是undefined。函数的形参没有传递实参时是undefined,函数未指定返回值默认返回undefined

六、符号

  1. 符号类型的值一般用于当作属性名
  2. 符号不能像其他基础类型一样let i = 1使用字面量语法获取值,获取符号类型的值需要调用符号的构造函数Symbol([x]),所以使用这种方式获取的符号值都是唯一不重复的,因为内存地址不同。
  3. 使用Symbol.for(x)获取’x’对应的符号

七、类型转换

  1. JavaScript中尽量不要隐式转换,有时候会出现问题,NaN和""都是false,但是它们不相等
  2. 使用Boolean(),Number(),String(),进行显示转换
  3. 某些操作符会进行隐式类型转换,+转数值,转布尔再取反,可以利用这种特性来进行数据类型转换。
  4. parseInt/Float()是全局函数,字符串转数值用,比如字符串"120px"可以转成数值120
  5. 原始值中的+操作符,有字符串参与做字符串拼接。没有字符串则全转换成数值相加

八、对象到原始值的转换

  1. toString()方法默认返回[object,Object],JavaScript的内置对象,比如Array,Funcation,Number重写了toString()所以不会返回默认值
  2. valueOf()方法,大体把它看作是,把对象转换成原始值(如果这个值存在)的方法。但是大多数对象无法转换成原始值,这种情况默认返回对象本身

九、变量的声明与赋值

  1. ES6之前使用var关键字声明,ES6之后使用let(变量)和const(常量)
  2. 声明不赋值默认值为undefinedconst声明必须赋值
  3. let和const声明的变量,常量具有块级作用域(块级作用域解释在下面),语法可以看作与Java相同
  4. let和const在同一个作用域中不能重复声明同名变量,但是var可以

十、var声明的变量的特殊性(接九)

  1. 使用var关键字声明的变量全局变量会成为全局对象window的属性。
  2. var声明的变量没有块级作用域,即{}作用域,只有函数作用域和全局作用域

(1)换句话说:只要不是函数体内var声明的变量都是全局变量

(2)例子:例如if(){},for(){},while(){},都是块级作用域,而funcation fun(){}是函数作用域也就是局部作用域

(3)区分函数作用域与块级作用域

  1. var声明的变量不能使用delete删除

  2. 注意:不使用关键字任何声明的变量也是全局变量(避免使用,但是可以使用delete删除)

  3. 使用var关键字声明的变量会导致声明提前
    var的提前声明

  4. 尽量使用let和const,因为var的语法十分不严谨,容易出现各种意外错误。举个例子
    var的缺点

十一、解构赋值

  1. 什么意思:只使用一个声明关键字,不使用逗号分隔,同时给多个变量赋不同的值。左侧是数组,右侧是数组或者可迭代的对象
    解构赋值

  2. 当一个函数返回一个数组时,这个数组的元素当作值赋给其他变量。可以使用这种方式
    解构赋值返回数组

  3. 当解构赋值左右侧的变量数量不一定相同,左侧多出来的赋undefined,右侧则忽略,并且右侧给左侧赋值是按照顺序的,就是按照逗号的顺序来赋值

  4. 对象的解构赋值对象的解构赋值

  5. 解构赋值还可以使用...把右侧剩余的值全部保存在同一个变量中(不介绍)

  6. 解构赋值还可以在左右侧嵌套数组进行赋值。但是会让代码变得复杂

我的问题

  1. 字符串不可修改,也没有提供修改值的方法,那重新赋值属于什么?
  2. 类型转换时的偏数值算法和偏字符串的算法没掌握。

总结

  1. String类型

语法与Java一致,单双引号都可以

  1. Number类型分三类

(1)+/-Infinity,表示无穷大或者无穷小
(2)NaN,表示一个Number类型的字面量
(3)正常的数值

  1. Boolean
  2. Null
  3. Undefined
  4. Object
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值