首页 > 编程语言 >JavaScript学习笔记01(包含ES6语法)

JavaScript学习笔记01(包含ES6语法)

时间:2023-07-19 22:22:05浏览次数:50  
标签:ES6 01 函数 JavaScript alert 调用 let 字符串 属性

Js 简介

什么是 Js?

Js 最初被创建的目的是“使网页更生动”。

Js 写出来的程序被称为 脚本,Js 是一门脚本语言。

  • 被直接写在网页的 HTML 中,在页面加载的时候自动执行
  • 脚本被以纯文本的形式提供和执行,不需要特殊的准备或编译即可运行(JIN compiler)

Js 不仅可以在浏览器中执行,也可以在服务端执行,本质上是它可以在任意搭载了Js 引擎的设备中执行。

浏览器中嵌入了 Js 引擎,有时也称作“JavaScript 虚拟机”,不同的引擎有不同的“代号”,例如:

  • V8 —— Chrome、Opera 和 Edge 中的 Js 引擎。
  • SpiderMonkey —— Firefox 中的 Js 引擎。
  • Chakra —— IE
  • JavaScriptCore、Nitro 、 SquirrelFish —— Safari

eg:如果 “V8 支持某个功能” ,那么我们可以认为这个功能大概能在 Chrome、Opera 和 Edge 中正常运行。

引擎是如何工作的?

引擎很复杂,但是基本原理很简单。

  1. 引擎(如果是浏览器,则引擎被嵌入在其中)读取(“解析”)脚本。
  2. 然后,引擎将脚本转化(“编译”)为机器语言。
  3. 然后,机器代码快速地执行。

引擎会对流程中的每个阶段都进行优化。它甚至可以在编译的脚本运行时监视它,分析流经该脚本的数据,并根据获得的信息进一步优化机器代码。

浏览器中的 Js

能做什么?

现代的 Js 是一种“安全的”编程语言。它不提供对内存或 CPU 的底层访问,因为它最初是为浏览器创建的,不需要这些功能。

Js 的能力很大程度上取决于它运行的环境。例如,Node.js 支持允许 Js 读取/写入任意文件,执行网络请求等。

浏览器中的 Js 可以做下面这些事:

  • 在网页中添加新的 HTML,修改网页已有内容和网页的样式。
  • 响应用户的行为,响应鼠标的点击,按键的按动。
  • 向远程服务器发送网络请求,下载和上传文件(所谓的 AJAXCOMET 技术)。
  • 获取或设置 cookie,向访问者提出问题或发送消息。
  • 记住客户端的数据(“本地存储”)。

不能做什么?

为了用户的(信息)安全,在浏览器中的 Js 的能力是受限的。

目的是防止恶意网页获取用户私人信息或损害用户数据。

此类限制的例子包括:

  • 网页中的 Js 不能读、写、复制和执行硬盘上的任意文件。它没有直接访问操作系统的功能。

    现代浏览器允许 Js 做一些文件相关的操作,但是这个操作是受到限制的。

    仅当用户做出特定的行为,Js 才能操作这个文件。eg:用户把文件“拖放”到浏览器中,或者通过 <input type='file'> 标签选择了文件。

    有很多与相机/麦克风和其它设备进行交互的方式,但是这些都需要获得用户的明确许可。

  • 不同的标签页/窗口之间通常互不了解。

    有时候,也会有一些联系,例如一个标签页通过 Js 打开的另外一个标签页。

    但即使在这种情况下,如果两个标签页打开的不是同一个网站(域名、协议或者端口任一不相同的网站),它们都不能相互通信。这就是所谓的“同源策略”。

    为了解决“同源策略”问题,两个标签页必须都包含一些处理这个问题的特定的 Js 代码,并均允许数据交换。

  • Js 可以轻松地通过互联网与当前页面所在的服务器进行通信。但是从其他网站/域的服务器中接收数据的能力被削弱了。尽管可以,但是需要来自远程服务器的明确协议(在 HTTP header 中)。这也是为了用户的信息安全。

数据类型

在 Js 中有 8 种基本的数据类型(7 种原始类型和 1 种引用类型)

Number 类型

代表整数和浮点数,可以有很多操作,eg:乘法 *、除法 /、加法 +、减法 - 等等。

除了常规的数字,还包括所谓的“特殊数值”:Infinity-InfinityNaN

科学计数法

  • "e" 和 0 的数量附加到数字后。就像:123e6123 后面接 6 个 0 相同。
  • "e" 后面的负数将使数字除以 1 后面接着给定数量的零的数字。例如 123e-6 表示 0.000123123 的百万分之一)。

多种进制

  • 可以直接在十六进制(0x),八进制(0oor00)和二进制(0bor0B)系统中写入数字。

  • 使用Number()方法将含有对应前缀的字符串数值转为十进制

    Number('0b111')  // 7
    Number('0o10')  // 8
    
  • parseInt(str, base) 将字符串 str 解析为在给定的 base 数字系统中的整数,2 ≤ base ≤ 36

  • num.toString(base) 将数字转换为在给定的 base 数字系统中的字符串。

常规数字检测

全局方法

  • isNaN(value) —— 将其参数转换为数字,然后检测它是否为 NaN
  • isFinite(value) —— 将其参数转换为数字,如果它是常规数字,则返回 trueNaN/Infinity/-Infinity返回false)

定义在Number上的方法 (ES6)

  • Number.isNaN() ——检查一个值是否为NaN。如果参数类型不是NaNNumber.isNaN一律返回false

  • Number.isFinite() —— 检查一个数值是否为有限的。如果参数类型不是数值,Number.isFinite一律返回false

区别

传统的全局方法isFinite()isNaN()先调用Number()将非数值的值转为数值,再进行判断,而这两个新方法只对数值有效,Number.isFinite()对于非数值一律返回false, Number.isNaN()只有对于NaN才返回true,非NaN一律返回false

isFinite(25) // true
isFinite("25") // true
Number.isFinite(25) // true
Number.isFinite("25") // false

isNaN(NaN) // true
isNaN("NaN") // true
Number.isNaN(NaN) // true
Number.isNaN("NaN") // false
Number.isNaN(1) // false

不规则字符串转换为数字

任务:将 12pt100px 之类的值转换为数字

全局方法

  • 使用 parseInt/parseFloat 进行“软”转换,它从字符串中读取数字,然后返回在发生 error 前可以读取到的值。

定义在Number上的方法 (ES6)

  • ES6 将全局方法parseInt()parseFloat(),移植到Number对象上面,行为完全保持不变。这样做的目的,是逐步减少全局性方法,使得语言逐步模块化。

Math 对象的扩展

  • 使用 Math.floorMath.ceilMath.truncMath.roundnum.toFixed(precision) 进行舍入。其中Math.trunc() —— 用于去除一个数的小数部分,返回整数部分(内部使用Number方法将其先转为数值)

  • Math.sign() —— 用来判断一个数到底是正数、负数、还是零。对于非数值,会先将其转换为数值。

    • 参数为正数,返回+1
    • 参数为负数,返回-1
    • 参数为 0,返回0
    • 参数为-0,返回-0;
    • 其他值,返回NaN
  • Math.cbrt() —— 计算一个数的立方根

  • Math.clz32() —— 将参数转为 32 位无符号整数的形式,然后返回这个 32 位值里面有多少前导 0

  • Math.imul() —— 返回两个数以 32 位带符号整数形式相乘的结果,返回的也是一个 32 位的带符号整数。

  • Math.fround() —— 返回一个数的32位单精度浮点数形式

  • Math.hypot() —— 返回所有参数的平方和的平方根

使用两个点来调用一个方法

请注意 123456..toString(36) 中的两个点不是打错了。如果我们想直接在一个数字上调用一个方法,比如上面例子中的 toString,那么我们需要在它后面放置两个点 ..

如果我们放置一个点:123456.toString(36),那么就会出现一个 error,因为 Js 语法隐含了第一个点之后的部分为小数部分。如果我们再放一个点,那么 JavaScript 就知道小数部分为空,现在使用该方法。

也可以写成 (123456).toString(36)

如果是小数:可以直接写为0.13.toFixed(1)

数值分隔符

ES2021,允许 Js 的数值(所有进制)使用下划线(_)作为分隔符,这个数值分隔符没有指定间隔的位数。

使用注意点:

  • 不能放在数值的最前面或最后面。
  • 不能两个或两个以上的分隔符连在一起。
  • 小数点的前后不能有分隔符。
  • 科学计数法里面,表示指数的eE前后不能有分隔符。
  • 分隔符不能紧跟着进制的前缀0b0B0o0O0x0X(eg:0_b1100,0b_0100)

下面三个将字符串转成数值的函数,不支持数值分隔符:

  • Number()
  • parseInt()
  • parseFloat()

BigInt 类型

number 类型无法安全地表示大于 (253-1),或小于 - (253-1)的整数。

更准确的说:

“number” 类型可以存储更大的整数,但超出安全整数范围 ±(253-1)会出现精度问题,因为并非所有数字都适合固定的 64 位存储。因此,可能存储的是“近似值”。

// 尾部的 "n" 表示这是一个 BigInt 类型
const bigInt = 1234567890123456789012345678901234567890n;

String 类型

三种包含字符串的方式:

  1. 双引号:"Hello"

  2. 单引号:'Hello'

  3. 反引号:`Hello`

    反引号是 功能扩展 引号,称为模板字符串。

    它允许我们通过将变量和表达式包装在 ${…} 中,来将它们嵌入到字符串中,并且可以在里面直接换行。

  • Js 中的字符串使用的是 UTF-16 编码。

  • Js 中字符串不可以被改变

  • length 属性表示字符串长度

  • 可以使用像 \n 这样的特殊字符或通过使用 \u... 来操作它们的 Unicode 进行字符插入。

    其中\uxxxx是字符的Unicode表示法,这种表示法只限于码点在\u0000~\uFFFF之间的字符。超出这个范围的字符,必须用两个双字节的形式表示。ES6 对这一点做出了改进,只要将码点放入大括号,就能正确解读该字符。

    "\uD842\uDFB7" 	// "

    标签:ES6,01,函数,JavaScript,alert,调用,let,字符串,属性
    From: https://www.cnblogs.com/Kiiakia/p/17566927.html

相关文章

  • 百度2015年笔试题:简述大端小端的概念并写出一个小程序来判断是大端还是小端
    首先我们来说一下大端小端的概念:大端存储和小端存储是计算机中数据存储的两种不同方式。在大端存储中,数据的高位字节被存储在内存的低地址处,而数据的低位字节被存储在内存的高地址处。这种存储方式类似于书写方式,先写高位字节,后写低位字节。例如,十六进制数0x12345678在大端存储中被......
  • LeetCode 1201. Ugly Number III 数学+二分答案
    Anuglynumberisapositiveintegerthatisdivisibleby\(a\),\(b\),or\(c\).Givenfourintegers\(n\),\(a\),\(b\),and\(c\),returnthe\(n\)thuglynumber.Solution考虑如何二分答案,假设一个函数\(f(num,a,b,c)\)会得到\([1,num]\)中uglynumb......
  • [SUCTF 2019]EasySQL
    [SUCTF2019]EasySQL题目来源:buuctf题目类型:web涉及考点:SQL注入、堆叠注入1.题目给了一个输入框,先随便传点东西进去传入数字回显如下:传入flag回显如下:传入字符无回显没什么其他线索了,还是爆破一下看看过滤了哪些字符:返回长度为507的字符都是被过滤了的,包括uni......
  • @JavascriptInterface传过来键值对,Android这边用什么类型接收
    传输键值对给Android的JavascriptInterface概述在Android开发中,我们经常需要在JavaScript和Java之间传输数据。一种常见的方式是通过使用@JavascriptInterface注解将Java方法暴露给JavaScript调用。这种方式可以实现双向通信,并且非常灵活。本文将介绍如何使用@JavascriptInterfac......
  • CS5466 Type-c to HDMI2.1_8K拓展坞方案芯片|低成本替代GSV6201方案
    GSV6201是一款高性能、低功耗、高性能的,USBType-C备用模式显示端口1.4至HDMI2.1转换器。通过集成增强型微控制器,GSV6201创造了一个经济高效的解决方案提供了上市时间优势。显示端口接收机支持高达32.4Gbps(HBR3,4通道)和HDMI发射机支持高达48Gbps(FRL,12G4Lane)。集成PowerDelivery3......
  • LeetCode 1011. Capacity To Ship Packages Within D Days 二分答案
    Aconveyorbelthaspackagesthatmustbeshippedfromoneporttoanotherwithindaysdays.Theithpackageontheconveyorbelthasaweightof\(weights[i]\).Eachday,weloadtheshipwithpackagesontheconveyorbelt(intheordergivenby\(wei......
  • maven 中deploy命令报401错误的原因及解决方案
    在mac版idea使用过程中有时候会出现deploy时候报401错误,如图: 经过详细的论证分析,找到如下原因及解决方案:原因一、pom文件李配置的私服仓库地址和settings.xml里配置的用户名和密码没有匹配上1、pom.xml里的仓库配置:<!--项目分发信息,在执行mvndeploy后表示要发布的位置。......
  • [SDOI2010] 代码拍卖会 题解
    [SDOI2010]代码拍卖会题解题目描述一个\(n,n\le10^{18}\)位数,仅由\(1\sim9\)组成,后一位数字一定大于等于前一位数字。求这些数中可以被\(m,m\le500\)整除的有多少,对\(999911659\)取模。解析这个数一定形如\(112334455677788999\)可以把它拆成\[\begin{aligned}......
  • JavaScript实现,判断一个点是否在多边形内
    //定义点的结构体functionpoint(){this.x=0;this.y=0;}//计算一个点是否在多边形里,参数:点,多边形数组functionPointInPoly(pt,poly){for(varc=false,i=-1,l=poly.length,j=l-1;++i<l;j=i)((poly[i].y<=pt.y&&pt.y<p......
  • android transaction failed 29201/-1, size 0-0 line 3009
    解决"androidtransactionfailed29201/-1,size0-0line3009"错误引言在Android开发中,我们经常会遇到各种错误和异常。其中一个常见的错误是"androidtransactionfailed29201/-1,size0-0line3009"。这个错误通常与Fragment事务相关,并且可能会导致应用崩溃或功能异常......