【Javascript系统学习】

语法与数据类型

语法

var\let\const

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); // undefinedvar 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 completedconsole.log(2); // not reachable} finally {console.log(3);return false; // overwrites the previous "return"console.log(4); // not reachable}// "return false" is executed nowconsole.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 finallyconsole.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)
}

循环与迭代

基本循环语句
//for语句
for (var i = 0; i < selectObject.options.length; i++) {if (selectObject.options[i].selected) {numberSelected++;}}
---------------------------------------------------------
//do...while语句
var i = 0;
do {i += 1;console.log(i);
} while (i < 5);
----------------------------------------------------------
//while语句
var n = 0;
var x = 0;
while (n < 3) {n++;x += n;
}
------------------------------------------------------------
break与continue
label语句

一个 label 提供了一个让你在程序中其他位置引用它的标识符。例如,你可以用 label 标识一个循环,然后使用 break 或者 continue 来指出程序是否该停止循环还是继续循环。

var num = 0;
outPoint: for (var i = 0; i < 10; i++) {for (var j = 0; j < 10; j++) {if (i == 5 && j == 5) {break outPoint; // 在 i = 5,j = 5 时,跳出所有循环,// 返回到整个 outPoint 下方,继续执行}num++;}
}alert(num); // 输出 55
var num = 0;
outPoint: for (var i = 0; i < 10; i++) {for (var j = 0; j < 10; j++) {if (i == 5 && j == 5) {continue outPoint;}num++;}
}
alert(num); // 95

for...in语句

for...in 语句循环一个指定的变量来循环一个对象所有可枚举的属性。JavaScript 会为每一个不同的属性执行指定的语句。

虽然使用 for...in 来迭代数组 Array 元素听起来很诱人,但是它返回的东西除了数字索引外,还有可能是你自定义的属性名字。因此还是用带有数字索引的传统的 for 循环来迭代一个数组比较好,因为,如果你想改变数组对象,比如添加属性或者方法,for...in 语句迭代的是自定义的属性,而不是数组的元素。

function dump_props(obj, obj_name) {var result = "";for (var i in obj) {result += obj_name + "." + i + " = " + obj[i] + "<br>";}result += "<hr>";return result;
}

for...of语句

for...of 语句在可迭代对象(包括Array、Map、Set、arguments 等等)上创建了一个循环,对值的每一个独特属性调用一次迭代。

迭代协议: 迭代协议具体分为两个协议:可迭代协议和迭代器协议。https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Iteration_protocols

let arr = [3, 5, 7];
arr.foo = "hello";for (let i in arr) {console.log(i); // 输出 "0", "1", "2", "foo"
}for (let i of arr) {console.log(i); // 输出 "3", "5", "7"
}// 注意 for...of 的输出没有出现 "hello"

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

实习面试题(答案自敲)、

1、为什么要重写equals方法&#xff0c;为什么重写了equals方法后&#xff0c;就必须重写hashcode方法&#xff0c;为什么要有hashcode方法&#xff0c;你能介绍一下hashcode方法吗&#xff1f; equals方法默认是比较内存地址&#xff1b;为了实现内容比较&#xff0c;我们需要…

mysql表级锁(表锁/元数据锁/意向锁)

文章目录 表级锁的分类1、表锁(分类)1.表共享读锁&#xff08;read lock&#xff09;2.表独占写锁&#xff08;write lock&#xff09;3.语法&#xff1a; 2、元数据锁&#xff08;meta data lock &#xff09;3、意向锁1.意向共享锁&#xff08;IS&#xff09;&#xff1a;由语…

【wiki知识库】05.分类管理实现--前端Vue模块

&#x1f4dd;个人主页&#xff1a;哈__ 期待您的关注 目录 一、&#x1f525;今日目标 二、&#x1f30f;前端部分的改造 2.1 新增一个tool.ts 2.2 新增admin-categoty.vue 2.3 添加新的路由规则 2.4 添加the-welcome.vue 2.5 修改HomeView.vue 三、❗注意 一、&…

车来了冲刺上市:业绩波动明显,依赖广告业务,滴滴、阿里入股

近日&#xff0c;MetaLight Inc.&#xff08;下称“元光科技”或“车来了”&#xff09;向港交所递交招股说明书&#xff0c;中金公司为其独家保荐人。 据招股书介绍&#xff0c;元光科技专注于利用时序数据&#xff08;按时间顺序排列的数据点&#xff09;来发现及预测分析对…

用队列实现栈-力扣

本题是使用队列来实现栈&#xff0c;在栈实现队列时&#xff0c;我们使用了输入栈和输出栈来调整输出顺序&#xff0c;但时队列不同&#xff0c;队列元素先入先出&#xff0c;即使使用两个队列&#xff0c;也没法调整到先入后出。因此做法是依次将队列元素出队&#xff0c;然后…

docker 存储 网络 命令

文章目录 1 docker存储1.1 目录挂载2.1卷映射2.1.1卷映射和目录挂载的区别2.1.2卷映射的使用 2 docker网络2.1查看docker的默认网络2.2查看容器的IP2.3容器互通2.4自定义网络2.4.1 创建自定义网络2.4.2创建容器的时候加入到自定义的网络2.4.3使用域名进行容器之间的访问2.4.4re…

盛凌电子IPO终止:实控人蒋志坚曾和前妻黄新打官司,儿子已离职

保荐人撤销&#xff0c;致使公司IPO终止。 近日&#xff0c;深圳证券交易所披露的信息显示&#xff0c;深圳盛凌电子股份有限公司&#xff08;下称“盛凌电子”&#xff09;的保荐人申万宏源证券撤回上市申请文件。因此&#xff0c;深圳证券交易所决定终止对该公司首次公开发行…

Qt报错:libvlc开发的程序,出现Direct3D output全屏窗口

问题描述&#xff1a; 在qt中开发重播模块时&#xff0c;第一次在窗口正常播放&#xff0c;点击重播按钮后会弹出新的Direct3D output窗口播放视频 分析&#xff1a; 因为libvlc_media_player_set_hwnd 这个函数 设置了不存在的窗口句柄&#xff0c;导致vlc视频播放窗口没有嵌…

kubesz(一键安装k8s)

引言 Kubernetes&#xff08;K8s&#xff09;是一个开源的容器编排系统&#xff0c;用于自动化部署、扩展和管理容器化应用程序。kubeasz 是一个用于快速搭建 Kubernetes 高可用集群的项目&#xff0c;它基于 Ansible&#xff0c;通过提供一套简单、易用的配置&#xff0c;使得…

用易查分制作活动抽奖系统,支持随机分配中奖结果!

学校或企业在开展抽奖活动时&#xff0c;如何确保公平公正&#xff0c;随机挑选中奖人员呢&#xff1f; 易查分的预置数据分配功能就可以实现&#xff0c;并且支持提交信息后随机分配中奖结果&#xff0c;不受任何人为因素的影响。下面就来教大家如何制作吧。 &#x1f4cc;使用…

ArcGIS for Vue3

二维&#xff1a; 1、创建vue项目 npm create vitelatest 2、安装ArcGIS JS API依赖包 npm install arcgis/core 3、引入ArcGIS API for JavaScript模块 <script setup> import "arcgis/core/assets/esri/themes/light/main.css"; import Map from arcgis…

HTML5+CSS3+JS小实例:网格图库

实例:网格图库 技术栈:HTML+CSS+JS 效果: 源码: 【HTML】 <!DOCTYPE html> <html lang="zh-CN"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0&…

C++中的Template常见用法

目录 摘要 函数模板 基本用法 重载与特化 类模板 基本用法 模板特化&#xff08;Specialization&#xff09;与偏特化&#xff08;Partial Specialization&#xff09; 别名模板&#xff08;Alias Templates&#xff09; 基本用法 变量模板&#xff08;Variable Temp…

EXCEL从图片链接获取图片

step1: 选中图片地址列 step2:开发工具→Visual Basic 文件→导入 导入我制作的脚本&#xff08;代码见文章末尾&#xff09; 点击excel的小图标回到表格界面。 点击【宏】 选中刚才导入的脚本&#xff0c;点执行&#xff0c;等待完成。 代码本体&#xff1a; Sub InsertPict…

端午档新片速递《谈判专家》领衔,每日影视作品推荐❗❗❗多部佳作待映

每日影视作品推荐一、新片速递《谈判专家》上映时间&#xff1a;2024年端午档预售情况&#xff1a;已开启预售&#xff0c;并有望成为该档期的票房冠军备注&#xff1a;据猫眼专业版数据&#xff0c;该片备受期待 《我才不要和你做朋友呢》上映时间&#xff1a;2024年端午档期预…

9. MySQL事务、字符集

文章目录 【 1. 事务 Transaction 】1.1 事务的基本原理1.2 MySQL 执行事务的语法和流程1.2.1 开始事务1.2.2 提交事务1.2.3 回滚&#xff08;撤销&#xff09;事务实例1&#xff1a;一致性实例2&#xff1a;原子性 【 2. 字符集 和 校对规则 】2.1 基本原理2.2 查看字符集查看…

通过SDKMan来安装各种版本的JDK

准备工作&#xff1a; 1. 打开命令行工具&#xff1a;首先&#xff0c;你需要打开电脑上的命令行工具。在Windows上是“命令提示符”或“PowerShell”&#xff0c;Mac或Linux上是“终端”。 安装SDKMan&#xff1a; 1. 安装SDKMan&#xff1a;在命令行中输入以下命令并按…

亚马逊 AWS 视频转码功能、AWS Elemental MediaConvert 中创建和管理转码作业

上传的视频需要转码成不同的编码, 可以直接在 AWS Elemental MediaConvert 中创建和管理转码作业 AWS Elemental MediaConvert 中创建和管理转码作业 /*** 视频转码* return bool* author wzb* data 2024/5/30*/function videoTranscode(&$data){$fileId $data[id] ?? …

Python用于存储和组织大型数据集的文件格式库之h5py使用详解

概要 在科学计算和数据分析中,大规模数据集的存储和管理是一个重要的问题。HDF5(Hierarchical Data Format version 5)是一种用于存储和组织大型数据集的文件格式。Python 的 h5py 库是一个用于与 HDF5 文件交互的接口,它结合了 HDF5 的强大功能和 Python 的易用性,使得处…

微信小游戏性能优化解决方案全新发布

小游戏凭借其简单易上手、玩法多样、互动性强的特点&#xff0c;迅速在市场中崭露头角。MMO、ARPG、卡牌等游戏类型也纷纷入局。玩家对启动时间长、发热、加载缓慢、闪退等问题也越来越敏感。 为了突破这些性能瓶颈&#xff0c;UWA全新发布了针对微信小游戏的性能优化解决方案…