• 博客园logo
  • 会员
  • 众包
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • HarmonyOS
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录
时光里的赶路人
博客园    首页    新随笔    联系   管理    订阅  订阅
前端基础-js篇(一)

1.use strict

 (1)ES5 规范增加了新的语言特性并且修改了一些已经存在的特性。为了保证旧的功能还能够使用,大部分的修改是默认不生效的。

(2)需要一个特殊的指令 —— "use strict" 来明确地激活这些特性。

(3)当它处于脚本文件的顶部时,则整个脚本文件都将以“现代”模式进行工作。"use strict" 可以被放在函数体的开头。这样则可以只在该函数中启用严格模式。但通常人们会在整个脚本中启用严格模式。

(4)只有注释可以出现在 "use strict" 的上面。

(5)没有类似于 "no use strict" 这样的指令可以使程序返回默认模式。一旦进入了严格模式,就没有回头路了。

2.js 基本的数据类型有哪些?

  在 JavaScript 中有 8 种基本的数据类型(译注:7 种原始类型和 1 种引用类型)。

(1)string:在 JavaScript 中,有三种包含字符串的方式。      

  1. 双引号:"Hello".
  2. 单引号:'Hello'.
  3. 反引号:`Hello`.

         双引号和单引号都是“简单”引用,在 JavaScript 中两者几乎没有什么差别。反引号是 功能扩展 引号。它们允许我们通过将变量和表达式包装在 ${…} 中,来将它们嵌入到字符串中。

(2)number:number 类型代表整数和浮点数。数字可以有很多操作,比如,乘法 *、除法 /、加法 +、减法 - 等等。除了常规的数字,还包括所谓的“特殊数值(“special numeric values”)”也属于这种类型:Infinity、-Infinity 和 NaN。

(3)bigint:BigInt 类型是最近被添加到 JavaScript 语言中的,用于表示任意长度的整数。

(4)boolean:boolean 类型仅包含两个值:true 和 false。

(5)null:特殊的 null 值不属于上述任何一种类型。它构成了一个独立的类型,只包含 null 值:JavaScript 中的 null 仅仅是一个代表“无”、“空”或“值未知”的特殊值。

(6)undefined:undefined 的含义是 未被赋值。如果一个变量已被声明,但未被赋值,那么它的值就是 undefined:通常,使用 null 将一个“空”或者“未知”的值写入变量中,而 undefined 则保留作为未进行初始化的事物的默认初始值。

(7)symbol:symbol 类型用于创建对象的唯一标识符。

(8)object:object 类型是一个特殊的类型。其他所有的数据类型都被称为“原始类型”,因为它们的值只包含一个单独的内容(字符串、数字或者其他)。相反,object 则用于储存数据集合和更复杂的实体。

typeof 运算符:typeof 运算符返回参数的类型。

对 typeof x 的调用会以字符串的形式返回数据类型:

typeof undefined // "undefined"

typeof 0 // "number"

typeof 10n // "bigint"

typeof true // "boolean"

typeof "foo" // "string"

typeof Symbol("id") // "symbol"

typeof Math // "object"  (1)

typeof null // "object"  (2)

typeof alert // "function"  (3)

总结

JavaScript 中有八种基本的数据类型(译注:前七种为基本数据类型,也称为原始数据类型,而 object 为复杂数据类型)。

  • 七种原始数据类型:
    • number 用于任何类型的数字:整数或浮点数,在 ±(253-1) 范围内的整数。
    • bigint 用于任意长度的整数。
    • string 用于字符串:一个字符串可以包含 0 个或多个字符,所以没有单独的单字符类型。
    • boolean 用于 true 和 false。
    • null 用于未知的值 —— 只有一个 null 值的独立类型。
    • undefined 用于未定义的值 —— 只有一个 undefined 值的独立类型。
    • symbol 用于唯一的标识符。
  • 以及一种非原始数据类型:
    • object 用于更复杂的数据结构。

我们可以通过 typeof 运算符查看存储在变量中的数据类型。

  • 通常用作 typeof x,但 typeof(x) 也可行。
  • 以字符串的形式返回类型名称,例如 "string"。
  • typeof null 会返回 "object" —— 这是 JavaScript 编程语言的一个错误,实际上它并不是一个 object。

 3.Null和undefined有什么区别?

(1)对null 进行数字型转换时,输出结果为 0

(2)对 undefined 进行数字型转换时,输出结果为 NaN,而非 0

(3)  undefined表示"缺少值",就是此处应该有一个值,但是还没有定义。通常,变量声明但未赋值时,其值就是undefined。

(4)   null表示"没有对象",即该处不应该有值。比如,通过搜索或赋值操作,导致现在没有了值,那么就可以使用null。

(5)null和undefined 两者相等,但是当两者做全等比较时,两者又不等。

那到底什么时候是null,什么时候是undefined呢?

   null表示"没有对象",即该处不应该有值。典型用法是:

(1) 作为函数的参数,表示该函数的参数不是对象。

(2) 作为对象原型链的终点。

undefined表示"缺少值",就是此处应该有一个值,但是还没有定义。典型用法是:

(1)变量被声明了,但没有赋值时,就等于undefined。

(2) 调用函数时,应该提供的参数没有提供,该参数等于undefined。

(3)对象没有赋值的属性,该属性的值为undefined。

(4)函数没有返回值时,默认返回undefined。

4.空值合并运算符“??”

这是一个最近添加到 JavaScript 的特性。 旧式浏览器可能需要 polyfills。当一个值既不是 null 也不是 undefined 时,我们将其称为“已定义的(defined)”。

a ?? b 的结果是:

  • 如果 a 是已定义的,则结果为 a,
  • 如果 a 不是已定义的,则结果为 b。

换句话说,如果第一个参数不是 null/undefined,则 ?? 返回第一个参数。否则,返回第二个参数。它是一种获得两者中的第一个“已定义的”值的不错的语法。

 result = a ?? b,运算结果等同于下面这个三目运算符:

result = (a !== null && a !== undefined) ? a : b;

??空值运算符可以返回第一个已定义的值:

let firstName = null;
let lastName = null;
let nickName = "Supercoder";

// 显示第一个已定义的值:
alert(firstName ?? lastName ?? nickName ?? "匿名"); // Supercoder

 

或运算符 || 可以以与 ?? 运算符相同的方式使用。

let firstName = null;
let lastName = null;
let nickName = "Supercoder";

// 显示第一个真值:
alert(firstName || lastName || nickName || "Anonymous"); // Supercoder

 

它们之间重要的区别是:

  • || 返回第一个 真 值。
  • ?? 返回第一个 已定义的 值。

类型转换规则:

  • 数字 0、空字符串 ""、null、undefined 和 NaN 都会被转换成 false。因为它们被称为“假值(falsy)”。
  • 其他值被转换为 true,所以它们被称为“真值(truthy)”。

换句话说,|| 无法区分 false、0、空字符串 "" 和 null/undefined。它们都一样 —— 假值(falsy values)。如果其中任何一个是 || 的第一个参数,那么我们将得到第二个参数作为结果。不过在实际中,我们可能只想在变量的值为 null/undefined 时使用默认值。也就是说,当该值确实未知或未被设置时。

例如,考虑下面这种情况:

let height = 0;

alert(height || 100); // 100
alert(height ?? 100); // 0
  • height || 100 首先会检查 height 是否为一个假值,它是 0,确实是假值。
    • 所以,|| 运算的结果为第二个参数,100。
  • height ?? 100 首先会检查 height 是否为 null/undefined,发现它不是。
    • 所以,结果为 height 的原始值,0。

实际上,高度 0 通常是一个有效值,它不应该被替换为默认值。所以 ?? 运算得到的是正确的结果。

与 && 或 || 一起使用

出于安全原因,JavaScript 禁止将 ?? 运算符与 && 和 || 运算符一起使用,除非使用括号明确指定了优先级。

下面的代码会触发一个语法错误:

let x = 1 && 2 ?? 3; // Syntax error

可以明确地使用括号来解决这个问题:

let x = (1 && 2) ?? 3; // 正常工作了

alert(x); // 2

总结

  • 空值合并运算符 ?? 提供了一种从列表中选择第一个“已定义的”值的简便方式。

    它被用于为变量分配默认值:

    // 当 height 的值为 null 或 undefined 时,将 height 的值设置为 100
    height = height ?? 100;
  • ?? 运算符的优先级非常低,仅略高于 ? 和 =,因此在表达式中使用它时请考虑添加括号。

  • 如果没有明确添加括号,不能将其与 || 或 && 一起使用。

 
posted on 2023-07-06 16:38  吹风哪页就哪页  阅读(34)  评论(0)    收藏  举报
刷新页面返回顶部
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3