【Javascript系统学习】

语法与数据类型

语法

var\let\const

用 var 或 let 语句声明的变量,如果没有赋初始值,则其值为 undefined。如果访问一个未声明的变量会导致抛出 ReferenceError 异常:

  • undefined 值在布尔类型环境中会被当作 false
  • 数值类型环境中 undefined 值会被转换为 NaN
  • 当你对一个 null 变量求值时,空值 null 在数值类型环境中会被当作 0 来对待
变量提升

一个函数中所有的var语句应尽可能地放在接近函数顶部的地方

  • JavaScript 变量的另一个不同寻常的地方是,你可以先使用变量稍后再声明变量而不会引发异常。这一概念称为变量提升;JavaScript 变量感觉上是被“提升”或移到了函数或语句的最前面。但是,提升后的变量将返回 undefined 值。因此在使用或引用某个变量之后进行声明和初始化操作,这个被提升的变量仍将返回 undefined 值。
  • 在 ECMAScript 6 中,let 和 const 同样会被提升变量到代码块的顶部但是不会被赋予初始值。在变量声明之前引用这个变量,将抛出引用错误(ReferenceError)。这个变量将从代码块一开始的时候就处在一个“暂时性死区”,直到这个变量被声明为止。
  • 对于函数来说,只有函数声明会被提升到顶部,而函数表达式不会被提升

/**
 * 例子 2
 */
// will return a value of undefined
var myvar = "my value";

(function () {
  console.log(myvar); // undefined
  var myvar = "local value";
})();
-------------------------------------------------------
console.log(x); // ReferenceError
let x = 3;
----------------------------------------------------------
/* 函数声明 */

foo(); // "bar"

function foo() {
  console.log("bar");
}

/* 函数表达式 */

baz(); // 类型错误:baz 不是一个函数

var baz = function () {
  console.log("bar2");
};
常量  

对象属性被赋值为常量是不受保护的,所以下面的语句执行时不会产生错误。

const MY_OBJECT = { key: "value" };
MY_OBJECT.key = "otherValue";

同样的,数组的被定义为常量也是不受保护的,所以下面的语句执行时也不会产生错误。

const MY_ARRAY = ["HTML", "CSS"];
MY_ARRAY.push("JAVASCRIPT");
console.log(MY_ARRAY); //logs ['HTML','CSS','JAVASCRIPT'];
全局变量

实际上,全局变量是全局对象的属性。在网页中,(译注:缺省的)全局对象是 window ,所以你可以用形如 window.variable 的语法来设置和访问全局变量。常量 

数据类型

  • 七种基本数据类型:
    • 布尔值(Boolean),有 2 个值分别是:true 和 false
    • null,一个表明 null 值的特殊关键字。JavaScript 是大小写敏感的,因此 null 与 NullNULL或变体完全不同。
    • undefined,和 null 一样是一个特殊的关键字undefined 表示变量未赋值时的属性。
    • 数字(Number),整数或浮点数,例如: 42 或者 3.14159
    • 任意精度的整数(BigInt),可以安全地存储和操作大整数,甚至可以超过数字的安全整数限制。
    • 字符串(String),字符串是一串表示文本值的字符序列,例如:"Howdy"
    • 代表(Symbol,在 ECMAScript 6 中新添加的类型)。一种实例是唯一且不可改变的数据类型。
  • 以及对象(Object)

     对象属性名字可以是任意字符串,包括空串。如果对象属性名字不是合法的 javascript 标识符,它必须用引号包裹

const unusualPropertyNames = {
  '': '空字符串',
  '!': '砰!'
}
console.log(unusualPropertyNames.'');   // SyntaxError: Unexpected string
console.log(unusualPropertyNames.!);    // SyntaxError: Unexpected token !
-----------------------------------------------------------------------
console.log(unusualPropertyNames[""]); // 空字符串
console.log(unusualPropertyNames["!"]); // 砰!

!!!核心基础:1.访问对象属性foo['var']最稳妥  2.字符串插值"${var}"

//访问对象属性
var foo = { a: "alpha", 2: "two" };
console.log(foo.a); // alpha
console.log(foo[2]); // two
//console.log(foo.2);  // SyntaxError: missing ) after argument list
//console.log(foo[a]); // ReferenceError: a is not defined
console.log(foo["a"]); // alpha
console.log(foo["2"]); // two
----------------------------------------------------------------------------
//字符串插值"${var}"
var name = "Bob",
  time = "today";
`Hello ${name}, how are you ${time}?`;

数字-》字符串:“+”

x = "The answer is " + 42; // "The answer is 42"
y = 42 + " is the answer"; // "42 is the answer"

字符串-》数字:parseInt()、parseFloat()

parseInt 方法只能返回整数,所以使用它会丢失小数部分。另外,调用 parseInt 时最好总是带上进制(radix)参数,这个参数用于指定使用哪一种进制。

x = "The answer is " + 42; // "The answer is 42"
y = 42 + " is the answer"; // "42 is the answer"

进制

整数可以用十进制(基数为 10)、十六进制(基数为 16)、八进制(基数为 8)以及二进制(基数为 2)表示。

  • 十进制整数字面量由一串数字序列组成,且没有前缀 0。
  • 八进制的整数以 0(或 0O、0o)开头,只能包括数字 0-7。
  • 十六进制整数以 0x(或 0X)开头,可以包含数字(0-9)和字母 a~f 或 A~F。
  • 二进制整数以 0b(或 0B)开头,只能包含数字 0 和 1。

控制语句与错误处理

throw语句
throw "Error2"; // String type
throw 42; // Number type
throw true; // Boolean type
throw {
  toString: function () {
    return "I'm an object!";
  },
};
------------------------------------------
//可以在抛出异常时声明一个对象。那你就可以在 catch 块中查询到对象的属性。

// Create an object type UserException
function UserException(message) {
  this.message = message;
  this.name = "UserException";
}

// Make the exception convert to a pretty string when used as
// a string (e.g. by the error console)
UserException.prototype.toString = function () {
  return this.name + ': "' + this.message + '"';
};

// Create an instance of the object type and throw it
throw new UserException("Value too high");
try....catch...finally 

换句话说,如果你在 try 代码块中的代码如果没有执行成功,那么你希望将执行流程转入 catch 代码块。如果 try 代码块没有抛出异常,catch 代码块就会被跳过。

finally块无论是否抛出异常都会执行。如果抛出了一个异常,就算没有异常处理,finally块里的语句也会执行。

执行顺序 

function f() {
  try {
    console.log(0);
    throw "bogus";
  } catch (e) {
    console.log(1);
    return true; // this return statement is suspended
    // until finally block has completed
    console.log(2); // not reachable
  } finally {
    console.log(3);
    return false; // overwrites the previous "return"
    console.log(4); // not reachable
  }
  // "return false" is executed now
  console.log(5); // not reachable
}
f(); // console 0, 1, 3; returns false
----------------------------------------------------------------------
function f() {
  try {
    throw "bogus";
  } catch (e) {
    console.log('caught inner "bogus"');
    throw e; // this throw statement is suspended until
    // finally block has completed
  } finally {
    return false; // overwrites the previous "throw"
  }
  // "return false" is executed now
}

try {
  f();
} catch (e) {
  // this is never reached because the throw inside
  // the catch is overwritten
  // by the return in finally
  console.log('caught outer "bogus"');
}

// OUTPUT
// caught inner "bogus"
 Error对象

DOMException、ECMAScript exceptions

function doSomethingErrorProne () {
  if (ourCodeMakesAMistake()) {
    throw (new Error('The message'));
  } else {
    doSomethingToGetAJavascriptError();
  }
}
....
try {
  doSomethingErrorProne();
}
catch (e) {
  console.log(e.name); // logs 'Error'
  console.log(e.message); // logs 'The message' or a JavaScript error message)
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/678503.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

APP分发移动应用分发未来:内容驱动

APP分发移动应用分发未来:内容驱动 一、引言 随着移动互联网技术的不断进步和用户需求的日益多样化,移动应用分发行业正面临着前所未有的机遇与挑战。在这个过程中,内容驱动成为了一个重要的趋势,它不仅可以提升用户体验&#x…

香橙派OrangePi AIpro上手笔记——之USB摄像头目标检测方案测试(三)

整期笔记索引 香橙派OrangePi AIpro上手笔记——之USB摄像头目标检测方案测试(一) 香橙派OrangePi AIpro上手笔记——之USB摄像头目标检测方案测试(二) 香橙派OrangePi AIpro上手笔记——之USB摄像头目标检测方案测试(…

前端之HTML语言之基础标签(持续更新)(基础部分更新结束)

前端之HTML语言 学习完后端的各种层之后,今天开始学习前端,前端和后端都是一个项目的组成部分。 前端对应得到语言是HTML,HTML最重要的有三块,行为,样式,J结构。行为就是交互,理解为鼠标的点击…

Python数据分析案例45——基于融合模型(Stack)的电商用户购买行为预测

案例背景 最近618快到了,上电商购买的人很多,正好我手上还有这个用户购买行为的数据,就做了一个机器学习模型流程,然后也使用的都是常见的机器学习模型,但是加了一点创新吧,使用了stacking融合模型。简单来…

【python】成功解决“NameError: name ‘X’ is not defined”错误的全面指南

成功解决“NameError: name ‘X’ is not defined”错误的全面指南 一、引言 在Python编程中,NameError: name X is not defined是一个常见的错误。这个错误通常意味着我们试图使用一个未定义的变量名X。本文将详细解析这一错误的原因,并提供一系列实用…

正版软件 | Fences 最新版本 V5 - 组织工作流程的最佳方式

『Fences 简介』 Stardock Fences 是一款由 Stardock 公司开发的桌面组织工具,旨在帮助用户管理桌面上的图标和文件。以下是对 Stardock Fences 软件的概述: Stardock Fences 概述 开发商: Stardock 功能: 桌面图标管理: Fences 允许用户将桌面上的…

【Python机器学习】无监督学习——不同类型的预处理

之前学习过,一些算法(比如神经网络和SVM)对数据缩放非常敏感。因此,通常的做法是对特征进行调节,使数据更适合于这些算法。通常来说,这是对数据的一种简单的按照特征的缩放和移动。举例: impor…

MPLAB--读写MCU数据

空工程 Read –Programmer\Read –File\Export, –确定后选择文件位置 & 文件名 Program –File\Import…,选择烧录的文件*.hex –Programmer\Program

在Vue3中使用WebHQChart实现K线图的沙盘推演

本文由ScriptEcho平台提供技术支持 项目地址:传送门 Vue.js K线沙盘推演代码 应用场景介绍 本代码演示了一个使用 Vue.js 框架开发的 K 线沙盘推演工具,它允许用户加载历史 K 线数据并对其进行编辑和修改,从而模拟和分析不同的市场走势。…

[原型资源分享]经典产品饿了么UI模版部件库

​部件库预览链接:https://f13gm0.axshare.com 支持版本: Axrure RP 8 文件大小: 3MB 文档内容介绍 基本部件:表单样式:12款、数据样式:10款、服务样式:6款、导航:5款、业务组件:7款、 模板…

关于无法通过脚本启动Kafka集群的解决办法

启动Kafka集群时,需要在每台个节点上启动启动服务,比较麻烦,通过写了以下脚本来进行启停;发现能正常使用停止功能,不能正常启动Kafka; Kafka启停脚本: ## 以防不能通过shell脚本启动Kafka服务…

SSM李宁线上商城系统小程序-计算机毕业设计源码48327

目 录 摘要 1 绪论 1.1课题研究背景 1.2研究现状 1.3系统开发技术的特色 1.4 ssm框架介绍 1.5论文结构与章节安排 2 李宁线上商城系统小程序系统分析 2.1 可行性分析 2.2 系统流程分析 2.2.1数据流程 2.2.2业务流程 2.3 系统功能分析 2.3.1 功能性分析 2.3.2 非…

CTFHUB-技能树-web-信息泄露

1.目录遍历 这个没什么好讲的,进去直接点击找flag,然后在下面目录翻,就找到了 ctfhub{ad8099fcb6e04071264ccb5c} 2.PHPINFO 访问 点击查看 3.备份文件下载 3.1 网站源码 访问 使用御剑扫描 然后下载查看 点击文本查看其他两个文件,也没发现…

从C到C++,C++入门篇(1)

1.什么是C C是一种通用编程语言,由Bjarne Stroustrup在1980年代初开发,作为C语言的扩展。 C支持多种编程范式,包括过程式编程、数据抽象、面向对象编程和泛型编程等。 这种语言在操作系统、游戏开发、图形界面、嵌入式系统、分布式系统、网…

RIP v2路由安全认证综合实验

RIP v2路由安全认证综合实验 实验拓扑: 实验要求:通过认证防范攻击者获得通信设备的相关信息。 实验步骤: 1.完成基本配置 sys Enter system view, return user view with CtrlZ. [Huawei]sys AR1 [AR1]undo in e Info: Information center…

【时间复杂度】定义与计算方法

文章目录 1.什么是时间复杂度?2.时间复杂度类别2.1 常量阶 O(1)2.2 对数阶 O(log n)2.3 线性阶 O(n)2.4 线性对数阶 O(n log n)2.5 平方阶 O(n^2^) 1.什么是时间复杂度? 时间复杂度是计算机科学中用来描述算法执行时间效率的一个概念。它表示了算法执行时…

借助调试工具理解BLE协议_3.Windows BLE调试工具

1.调试工具下载 Windows BLE调试工具是一款运行在Windows下的BLE调试软件,实现了扫描、连接、获取BLE设备上的服务以及向服务写入和读取数据的功能。图1是Windows BLE调试工具主界面。资源地址: https://download.csdn.net/download/mecompu/86508009?…

CogVLM2多模态开源大模型部署与使用

CogVLM2多模态开源大模型部署与使用 项目简介 CogVLM2 是由清华大学团队发布的新一代开源模型系列。2024年5月24日,发布了Int4版本模型,只需16GB显存即可进行推理。2024年5月20日,发布了基于llama3-8b的CogVLM2,性能与GPT-4V相当…

AI时代下的智能商品计划管理

在时尚产业迅猛发展的今天,商品计划已成为品牌运营不可或缺的一环。优秀的服装品牌通过精心策划的商品计划,不仅致力于为消费者提供独特且符合其需求的产品,同时也在不断探索如何更有效地整合企业资源,确保从设计、研发、采购到生…