当前位置: 首页 > news >正文

js 基础

主要原则

就近原则

语法注意

  1. javascript中严格区分大小写
  2. js中如果不写分号,浏览器会自动添加,但是会消耗一些系统资源。而且有些时候,浏览器会加错分号。
  3. JS中会忽略多个空格和换行,所以我们可以利用空格和换行对代码进行格式化。

字符集

使用unicode字符集编写的,区分大小写。html中编写一些事件属性可以不区分大小写,但是在javascript中必须区分大小写(监听事件一般使用小写)。

unicode转义序列

为了支持老旧程序员,javascript可以使用6个ASCII字符来代表16位unicode内码。这些unicode转义序列均以\u为前缀,其后跟4个十六进制数。这种转义可以直接用在javascript的直接量中、正则表达式直接量和标识符中。

在字符串中使用转义字符输入Unicode编码 \u四位编码

在网页中使用Unicode编码 &#编码; 这里的编码需要的是10进制

字面量和变量

字面量(直接量)

字面量都是一些不可改变的值,就是常量。

变量

变量可以用来保存字面量,而且变量的值是可以任意改变的变量更加方便我们使用。在js中使用var关键字来声明一个变量。

如果声明变量未赋值,变量的类型会转化为undefined,这里表示js的变量知道当前变量是什么类型的变量。

标识符

标识符就是个名字,对变量和函数进行命名。以字母、下划线、数字及美元符开始,后续跟字母、下划线、数字或美元符(数字不允许出现在首位)。

  1. 标识符中可以含有字母、数字、_ 、$。

  2. 标识符不能以数字开头。

  3. 标识符一般都采用驼峰命名法。

  4. 标识符不能是ES中的关键字或保留字。
    在这里插入图片描述
    JS底层保存标识符时实际上是采用的Unicode编码,所以理论上讲,所有的utf-8中含有的内容都可以作为标识符。

数据类型

数据类型指的就是字面量的类型。在JS中一共有5种基础数据类型,以及引用类型。检测变量类型typeof。

String
Number

javascript中所有的数字都是number类型,包括整数和浮点数。

Number.MAX_VALUE、Number.MIN_VALUE表示数字的最大值和最小值。

JavaScript预定义了全局变量Infinity和NaN:

Infinity表示正无穷大,-Infinity表示负无穷。 被零整除在JavaScript并不报错:它只是简单的返回无穷大(Infinity)或负无穷大(-Infinity)。

**NaN 表示Not a number, 表示不是一个数字。**它和任何值都不相等,包括自身。也就是说,没办法通过x==NaN来判断变量x是否是NaN。相反,应当使用x!=NaN来判断,当且仅当xNaN的时候,表达式的结果才为true。函数isNaN()的作用与此类似,如果参数是NaN或者是一个非数字值(比如字符串和对象),则返回trueJavaScript中有一个类似的函数isFinite(),在参数不是NaNInfinity-Infinity的时候返回true

Infinity //将一个可读/写的变量初始化为infinity
Number.POSITIVE_INFINITY //同样的值,只读
1/0 //这也是同样的值
Number.MAx_VALUE + 1 //计算结果还是Infinity
Number.NEGATIVE_INFINITY //该表达式表示了负无穷大
-Infinity
-1/0
-Number.MAX_VALUE - 1
NaN //将一个可读/写的变量初始化为NaN
Number.NaN //同样的值,但是只读
0/0 //计算结果是NaN
Number.MIN_VALUE/2 //发生下溢:计算结果为0
-Number.MIN_VALUE/2 //负零
-1/Infinity //同样是负零
-0

负零值同样有些特殊,它和正零值是相等的(甚至使用JavaScript的严格相等测试来判断)。这意味着这两个值几乎一模一样,除了作为除数之外.

如果使用JS进行浮点运算,可能得到一个不精确的结果。所以千万不要使用JS进行对精确度要求比较高的运算。

Boolean
Null

null是JavaScript语言的关键字,它表示一个特殊值,常用来描述“空值”。

null执行typeof预算,结果返回字符串“object”,但是null定位在基本数据类型里面。也就是说,可以将null认为是一个特殊的对象值,含义是“非对象”。

null的使用场景:初始对象赋值、释放对象、清空数组、清空变量。

Undefined

Undefined(未定义)类型的值只有一个,就undefind。当声明一个变量,但是并不给变量赋值时,它的值就是undefined

引用类型

对象类型包含数组、对象、函数

类型转换

转换和相等性

由于JavaScript可以做灵活的类型转换,因此其“==”相等运算符也随相等的含义灵活多变。例如,如下这些比较结果均是true:

null == undefined //这两值被认为相等
"0" == 0 //在比较之前字符串转换成数字
0 == false //在比较之前布尔值转换成数字
"0" == false //在比较之前字符串和布尔值都转换成数字

”等于运算符在判断两个值是否相等时要做类型转换,“=”恒等运算符在判断相等时并未做任何类型转换。

显示转换

做显式类型转换最简单的方法就是使用Boolean()、Number()、String()或Object()函数。当不通过new运算符调用这些函数时,它们会作为类型转换函数并按下图
在这里插入图片描述

Number("3") // => 3 Number(x)如果参数有非数字的字符串(例如:"12px")会返回结果是为NaN,使用ParseInt()代替
string(false) //"false”或使用false.toString()
Boolean([]) // => true
object(3)  //new Number(3)

需要注意的是,除了null或undefined之外的任何值都具有toString()方法,这个方法的执行结果通常和String()方法的返回结果一致。该方法不会影响到原变量,它会将转换的结果返回。Number类定义的toString()方法可以接收表示转换基数(radix)的可选参数,如果不指定此参数,转换规则将是基于十进制。指定某种进制,可以将数字转换为其他进制数(范围在2~36之间),例如:

var n = 17;
binary_string = n.toString(2); //转换为"10001"
octal_string = "o" + n.toString(8); //转换为“o21"
hex_string ="ox" + n.toString(16); //转换为“ox11"

JavaScript中的某些运算符会儆隐式的类型转换,有时用于类型转换:

+运算符的一个操作数是字符串,它将会把另外一个操作数转换为字符串。

一元+运算符将其操作数转换为数字。例如:x += 1; +x;

一元!运算符将其操作数转换为布尔值并取反。例如: !x

parseInt()函数和parseFloat()函数(它们是全局函数,不从属于任何类的方法)更加灵活。parseInt()只解析整数,第二个参数,来指定数字的进制。而parseFloat()则可以解析整数和浮点数。这两个函数会忽略非数字字符串。如果对非String使用parseInt()或parseFloat()它会先将其转换为String,然后在操作。

运算符

运算符的优先级

在这里插入图片描述
上表所示的运算符是按照优先级从高到低排序的,每个水平分割线内的一组运算符具有相同的优先级。运算符优先级控制着运算符的执行顺序。优先级高的运算符(表格的顶部)的执行总是先于优先级低(表格的底部)的运算符。

算数表达式
“+” 运算符

二元加法运算符“+”可以对两个数字做加法,也可以做字符串连接操作。当两个操作数都是数字或都是字符串的时候,计算结果是显而易见的。然而对于其他情况来说,加号的转换规则优先考虑字符串连接,如果其中一个操作数是字符串或者转换为字符串的对象,另外一个操作数将会转换为字符串,加法将进行字符串的连接操作。如果两个操作数都不是类字符串(string-like)的,那么都将进行算术加法运算。

从技术上讲,加法操作符的行为表现为:

  1. 如果其中一个操作数是对象,则对象会遵循对象到原始值的转换规则转换为原始类值:日期对象通过toString()方法执行转换,其他对象则通过valueOf()方法执行转换(如果valueof()方法返回一个原始值的话)。由于多数对象都不具备可用的valueof()方法,因此它们会通过toString()方法来执行转换。

  2. 在进行了对象到原始值的转换后,如果其中一-个操作数是字符串的话,另一个操作数也会转换为字符串,然后进行字符串连接。

  3. 否则,两个操作数都将转换为数字(或者NaN),然后进行加法操作。

任何值做- * /运算时都会自动转换为Number,使用下面方法可以将字符串转换成number:

var d = "123";
d = d - 0;
console.log(typeof d);
console.log(d);
一元运算符

在一元运算符中的+-可以表示正、负。

+ 正号不会对数字产生任何影响。

对于非Number类型的值,它会将先转换为Number,然后在运算可以对一个其他的数据类型使用 +, 来将其转换为number。它的原理和Number()函数一样。

a = 18";
a = +a;
console.log("a = "+a); //a = 18
console.log(typeof a); // number

- 负号可以对数字进行负号的取反

位运算符
关系表达式

非数值的情况:

对于非数值进行比较时,会将其转换为数字然后在比较。

比较两个字符串时,比较的是字符串的字符编码。比较字符编码时是一位一位进行比较,如果两位一样,则比较下一位。

console.log("bbc" < "b"); //true

如果比较的两个数字字符串型,可能会得到不可预期的结果,所以必须进行转型。

相等和不等运算符

相等运算符(equality operator),它用来检测两个操作数是否相等,这里“相等”的定义非常宽松,可以允许进行类型转换。

“===”严格相等运算符不允许进行类型转换。

相等运算符“==”和恒等运算符相似,但相等运算符的比较并不严格。如果两个操作数不是同一类型,那么相等运算符会尝试进行一些类型转换,然后进行比较:

  • 如果两个操作数的类型相同,则和上文所述的严格相等的比较规则一样。如果严格相等,那么比较结果为相等。如果它们不严格相等,则比较结果为不相等。
  • 如果两个操作数类型不同,“==”相等操作符也可能会认为它们相等。检测相等将会遵守如下规则和类型转换:
    1. 如果一个值是null,另一个是undefined,则它们相等。
    2. 如果一个值是数字,另一个是字符串,先将字符串转换为数字,然后使用转换后的值进行比较。
    3. 如果其中一个值是true,则将其转换为1再进行比较。如果其中一个值是false,则将其转换为0再进行比较。
    4. 如果一个值是对象,另一个值是数字或字符串,则使用3.8.3节所提到的转换规则将对象转换为原始值,然后再进行比较。对象通过toString()方法或者valueof()方法转换为原始值。JavaScript语言核心的内置类首先尝试使用valueof(),再尝试使用toString(),除了日期类,日期类只使用toString()转换。那些不是JavaScript语言核心中的对象则通过各自的实现中定义的方法转换为原始值。
    5. 其他不同类型之间的比较均不相等。
比较运算符
in 运算符
instanceof 运算符
逻辑表达式

对于非布尔值进行与或运算时,会先将其转换为布尔值,然后再运算,并且返回原值。

逻辑与(&&)

​ 如果第一个值为true,则必然返回第二个值(原值)。例如:var result = 5 && 6 result 为 6;

​ 如果第一个值为false,则直接返回第一个值(原值)。

逻辑或(||)

​ 如果第一个值为true,则直接返回第一个值(原值)。例如:var result = 5 || 6 result 为5;

​ 如果第一个值为false,则直接返回第二个值(原值)。

逻辑非(!)

表达式计算

和其他很多解释性语言一样,JavaScript同样可以解释运行由JavaScript源代码组成的字符串,并产生一-个值。JavaScript通过全局函数eval()来完成这个工作:

eval("3+2") // =>5

动态判断源代码中的字符串是一种强大的语言特性,几乎没有必要在实际中应用。如果你使用了eval(),你应当仔细考虑是否真的需要使用它。

http://www.lqws.cn/news/565273.html

相关文章:

  • PCB工艺学习与总结-20250628
  • JVM——垃圾回收
  • Kafka4.0初体验
  • 系统架构设计师备考之架构设计专业知识
  • 软考 系统架构设计师系列知识点之杂项集萃(100)
  • TCP/UDP协议深度解析(三):TCP流量控制的魔法—滑动窗口、拥塞控制与ACK的智慧
  • Cursor 教程:用 Cursor 创建第一个 Java 项目
  • Webpack 中的 Loader 和 Plugin 全面详解
  • 全新大模型开源,腾讯(int4能打DeepSeek) Vs 谷歌(2GB运行多模态)
  • 【GESP 四级】一个程序掌握大部分知识点
  • 学习使用dotnet-dump工具分析.net内存转储文件(3)
  • 深入理解Mysql索引底层数据结构和算法
  • NeRF-Lidar实景重建:大疆Mavic 4 Pro低成本建模方案(2025实战指南)
  • 当SAM遇到声纳图像时之论文阅读
  • 【blender】使用bpy对一个obj的不同mesh进行不同的材质贴图(涉及对bmesh的操作)
  • 一键高效率图片MD5修改工具PHP版
  • 量子算法入门——5.Qiskit库介绍与简单应用(1)
  • 《伴时匣》app开发技术分享--用户登录(3)
  • MYSQL与PostgreSQL的差异
  • 解锁云原生微服务架构:搭建与部署实战全攻略
  • mac触摸板设置右键
  • 四大WordPress模板资源网站
  • docker启动xxl-job 网络问题
  • 【Linux手册】进程等待:必要性剖析与wait、waitpid等多种方式实操指南
  • IDE/IoT/实践小熊派LiteOS工程配置、编译、烧录、调试(基于 bearpi-iot_std_liteos 源码)
  • 软件测试 selenium
  • 【innovus基础】- 如何手动画线?
  • 【技术追踪】CLAIM:临床导向的 LGE 增强技术用于实现真实且多样化的心肌瘢痕合成与分割
  • 基于云的平板挠度模拟:动画与建模-AI云计算数值分析和代码验证
  • 青少年编程与数学 02-022 专业应用软件简介 01 设计与创意类软件:Adobe Creative Cloud