JavaScript基础2之运算符、函数

JavaScript基础

  • 运算符
    • 一元操作符
      • 递增/递减
      • 一元加和减
    • 布尔操作符
      • 逻辑非
      • 逻辑与
      • 逻辑或
    • 乘性操作符
      • 乘法操作符
      • 除法操作符
      • 取模操作符
    • 加性操作符
      • 加法操作符
      • 减法操作符
    • 比较操作符
      • 相等操作符
      • 关系操作符
  • 函数
    • 函数声明
    • 函数表达式
    • 箭头函数
    • 函数的实参和形参
      • arguments
    • 默认参数
    • 参数的拓展和收集
      • 拓展参数
      • 收集参数
    • return
    • 匿名函数
      • 函数表达式
    • 自执行函数
    • 函数的存储

运算符

一元操作符

递增/递减

  • 前缀递增/递减
let age=18
++age;  
=>
age=age+1

变量的值都会在语句被求值之前改变

let age=18
++age;  //等同于 age=age+1
console.log("age",age)
--age;
console.log("age",age)  //等同于 age=age-1

let num=20
let newNum=--num+2
//变量的值都会在语句被求值之前改变
console.log("num",num) //19
console.log("newNum",newNum) //21

在这里插入图片描述

  • 后缀递增/递减
    在语句被求值之后改变
// 后缀 在语句被求值之后改变
var age=10
age++
console.log("age",age)

var num=2;
var num2=20
var num3=num--+num2 //22
var num4=num+num2  //21
console.log("num3",num3)
console.log("num4",num4)

在这里插入图片描述

一元加和减

一元加由一个加号(+)表示,放在变量前头,对数值没有任何影响

如果将一元加应用到非数值,则会执行与使用 Number()转型函数一样的类型转换:

  • 布尔值 false和 true 转换为 0 和 1
  • 字符串根据特殊规则进行解析
  • 对象会调用它们的 valueOf()或 toString()方法以得到可以转换的值
let num=25
num= +num
console.log("num",num)

let age="0.234"
age = +age
console.log("age",age)

let num1="05"
num1 = +num1
console.log("num1",num1)

let num2="k"
num2 =+num2
console.log("num2",num2)

let num3=false
num3 =+num3
console.log("num3",num3)

let num4={
    valueOf(){
        return -34
    }
}
num4 = +num4
console.log("num4",num4)

在这里插入图片描述
一元减由一个减号(-)表示,放在变量前头,主要用于把数值变成负值,如把 1 转换为-1

let num=25
num= -num
console.log("num",num)

let age="0.234"
age = -age
console.log("age",age)

let num1="05"
num1 = -num1
console.log("num1",num1)

let num2="k"
num2 =-num2
console.log("num2",num2)

let num3=false
num3 =-num3
console.log("num3",num3)

let num4={
    valueOf(){
        return -34
    }
}
num4 = -num4
console.log("num4",num4)

在这里插入图片描述

布尔操作符

逻辑非

!=> 始终返回的是一个布尔值
首先会对操作数转换成布尔值,在对其取反

let a={}
console.log("!a",!a)

let b=""
console.log("!b",!b)

let c="111"
console.log("!c",!c)

let d=0
console.log("!d",!d)

let e=111
console.log("!e",!e)

//null NaN undefined =>都是false
let f=null
console.log("!f",!f)

let g=NaN
console.log("!g",!g)

let h=undefined
console.log("!h",!h)

在这里插入图片描述

逻辑与

&&

let res = true && false
  • 如果第一个操作数是对象,则返回第二个操作数。
  • 如果第二个操作数是对象,则只有第一个操作数求值为 true 才会返回该对象。
  • 如果两个操作数都是对象,则返回第二个操作数。
  • 如果有一个操作数是 null,则返回 null。
  • 如果有一个操作数是 NaN,则返回 NaN。
  • 如果有一个操作数是 undefined,则返回 undefined。

逻辑与操作符是一种短路操作符,意思就是如果第一个操作数决定了结果,那么永远不会对第二个操作数求值。对逻辑与操作符来说,如果第一个操作数是 false,那么无论第二个操作数是什么值,结果也不可能等于 true。

let obj={}
let obj1={name:"张三"}

let res1= obj1 && 2
let res2= true && obj1
let res3= obj && obj1
console.log("res1",res1)
console.log("res2",res2)
console.log("res3",res3)

在这里插入图片描述

逻辑或

||

let res = true || false
  1. true true : true
  2. true false: true
  3. false true : true
  4. false false : false

只有两个操作数为 false 的情况下,结果才为 false

  • 如果第一个操作数是对象,则返回第一个操作数。
  • 如果第一个操作数求值为 false,则返回第二个操作数。
  • 如果两个操作数都是对象,则返回第一个操作数。
  • 如果有两个操作数是 null,则返回 null。
  • 如果有两个操作数是 NaN,则返回 NaN。
  • 如果有两个操作数是 undefined,则返回 undefined。
let obj={}
let obj1={name:"张三"}

let res1=obj || 555
let res2=false || 234
let res3= false || obj1
let res4=obj || obj1
console.log("res1",res1)
console.log("res2",res2)
console.log("res3",res3)
console.log("res4",res4)

在这里插入图片描述

乘性操作符

乘法、除法、取模

乘法操作符

乘法:*

let res = 10*2

特殊情况:

  • 符号相同则为正,符号不同则为负
  • 如果有任一操作数是 NaN,则返回 NaN。
  • Infinity * 0 => NaN
  • Infinity * 非0 => Infinity/-Infinity
  • Infinity * Infinity =Infinity
  • 如果有不是数值的操作数,则先在后台用 Number()将其转换为数值
let a=10*(-9)
let b=NaN * 50
let c=Infinity * 50
let d=Infinity *(-20)
let e=Infinity * 0
let f=Infinity *Infinity
let g=4*"20"
console.log("a",a)
console.log("b",b)
console.log("c",c)
console.log("d",d)
console.log("e",e)
console.log("f",f)
console.log("g",g)

在这里插入图片描述

除法操作符

除法:/

let res = 10*2

特殊情况:

  • 符号相同则为正,符号不同则为负
  • 如果有任一操作数是 NaN,则返回 NaN。
  • Infinity / Infinity => NaN
  • 0/0 => NaN
  • 非0的值 / 0 => 根据第一个操作数的符号返回 Infinity 或 -Infinity
  • 如果是 Infinity 除以任何数值,则根据第二个操作数的符号返回 Infinity 或-Infinity。
  • 如果有不是数值的操作数,则先在后台用 Number()函数将其转换为数值,然后再应用上述规则。
let a=10/(-2)
let b=NaN * 5
let c=Infinity/Infinity
let d=0/0
let e=-100/0
let f=Infinity/5
let g=Infinity/(-10)
let h="50"/10

console.log("a",a)
console.log("b",b)
console.log("c",c)
console.log("d",d)
console.log("e",e)
console.log("f",f)
console.log("g",g)
console.log("h",h)

在这里插入图片描述

取模操作符

%

let result = 26 % 5; // 等于 1

特殊情况:

  • 被除数是无限值,除数是有限值 => NaN
  • 被除数是有限值,除数是0 => NaN
  • Infinity % Infinity => NaN
  • 3 % Infinity => 3
  • 0%9=>0
  • 如果有不是数值的操作数,则先在后台用 Number()函数将其转换为数值,然后再应用上述规则。
let a=Infinity%5
let b=4%0
let c=Infinity%Infinity
let d=3%Infinity
let e=0%9
let f=15%2

在这里插入图片描述

加性操作符

加法、减法

加法操作符

  1. 特殊情况:
  • 如果有任一操作数是 NaN,则返回 NaN;
  • 如果是 Infinity 加 Infinity,则返回 Infinity;
  • 如果是-Infinity 加-Infinity,则返回-Infinity;
  • 如果是 Infinity 加-Infinity,则返回 NaN;
  • 如果是+0 加+0,则返回+0;
  • 如果是-0 加+0,则返回+0;
  • 如果是-0 加-0,则返回-0。
  1. 有一个操作数是字符串
  • 如果两个操作数都是字符串,则将第二个字符串拼接到第一个字符串后面;
  • 如果只有一个操作数是字符串,则将另一个操作数转换为字符串,再将两个字符串拼接在一起。
  1. 如果有任一操作数是对象、数值或布尔值,则调用它们的 toString()方法以获取字符串,然后再应用前面的关于字符串的规则。
  2. 对于 undefined 和 null,则调用 String()函数,分别获取"undefined"和"null"。
let a=NaN+5
let b=Infinity+Infinity
let c=Infinity +(-Infinity)
let d=-Infinity +(-Infinity)
let e="15"+"c"
let f=1+"4"
let obj={
    toString(){
        return "abc"
    }
}
let g=34+obj
let h=undefined+44
let i=null+"125"
console.log("a",a)
console.log("b",b)
console.log("c",c)
console.log("d",d)
console.log("e",e)
console.log("f",f)
console.log("g",g)
console.log("h",h)
console.log("i",i)


在这里插入图片描述

减法操作符

let result = 2 - 1;

特殊用法:

  • 如果有任一操作数是 NaN,则返回 NaN。
  • 如果是 Infinity 减 Infinity,则返回 NaN。
  • 如果是-Infinity 减-Infinity,则返回 NaN。
  • 如果是 Infinity 减-Infinity,则返回 Infinity。
  • 如果是-Infinity 减 Infinity,则返回-Infinity。
  • 如果是+0 减+0,则返回+0。
  • 如果是+0 减-0,则返回-0。
  • 如果是-0 减-0,则返回+0。
  • 如果有任一操作数是字符串、布尔值、null 或 undefined,则先在后台使用 Number()将其转换为数值,然后再根据前面的规则执行数学运算。如果转换结果是 NaN,则减法计算的结果是NaN。
  • 如果有任一操作数是对象,则调用其 valueOf()方法取得表示它的数值。如果该值是 NaN,则减法计算的结果是 NaN。如果对象没有 valueOf()方法,则调用其 toString()方法,然后再将得到的字符串转换为数值。
let a=NaN-5
let b=Infinity-Infinity
let c=Infinity-(-Infinity)
let d=-Infinity -(-Infinity)
let e=-Infinity -Infinity
let f=15-"c"
let g=5-true
let h=5-null
let i=5-undefined
let obj={
    toString(){
        return "33"
    }
}
let j=34-obj

console.log("a",a)
console.log("b",b)
console.log("c",c)
console.log("d",d)
console.log("e",e)
console.log("f",f)
console.log("g",g)
console.log("h",h)
console.log("i",i)
console.log("j",j)

在这里插入图片描述

比较操作符

相等操作符

相等操作符包括四种:

  • 等于( == )
  • 不等于(!=)
  • 全等( === )
  • 不全等(!== )
  1. 首先会判断两者类型是否相同,相同的话就比较两者的大小;
  2. 类型不相同的话,就会进行类型转换;
  3. 会先判断是否在对比 null 和 undefined,是的话就会返回 true
  4. 判断两者类型是否为 string 和 number,是的话就会将字符串转换为 number
1 == '1'1 ==  1
  1. 判断其中一方是否为 boolean,是的话就会把 boolean 转为 number 再进行判断
'1' == true'1' ==  11  ==  1
  1. 判断其中一方是否为 object 且另一方为 string、number 或者 symbol,是的话就会把 object 转为原始类型再进行判断
'1' == { name: 'js' }'1' == '[object Object]'

其中一个操作数是NaN,相等运算符会返回false,不相等运算符会返回true。 ​
对于不等于运算符(!=),只有在强制类型转化后不相等才会返回true。 ​
对于全等运算符( === ),只有当两个操作数的数据类型和值都相等时,才会返回true。它并不会进行数据类型的转化。 ​
对于不全等运算符( !== ),只有两个操作数在不进行类型转化的情况下是不相等的,才会返回true。 ​
在平时的开发中,建议使用全等不全等在做比较,这样会更加严谨,避免出现意料之外的结果。

关系操作符

关系操作符包括四种:

  • 小于(<)
  • 大于(>)
  • 小于等于(<=)
  • 大于等于(>=)

返回布尔值

  • 如果这两个操作数都是数值,则执行数值比较;
  • 如果两个操作数都是字符串,则比较两个字符串对应的字符编码值;
  • 如果一个操作数是数值,则将另一个操作数转换为一个数值,然后执行数值比较;
  • 如果一个操作数是对象,则调用这个对象的valueOf()方法,并用得到的结果根据前面的规则执行比较;
  • 如果一个操作数是布尔值,则先将其转换为数值,然后再执行比较。

函数

实际上也是对象
每个函数都是Function 类型的实例,而且也有属性和方法

函数声明

function sum(a, b) {
	return a +b
}

函数表达式

var sum = function (a,b){
	return a + b
}

函数声明提升,但是函数表达式是不可以的

console.log(sum(1,2))

//函数声明提升
function sum(a,b){
    return a+b
}

在这里插入图片描述

console.log(sum(1,2))

var sum=function (a,b){
    return a+b
}

在这里插入图片描述

箭头函数

var sum=(a,b)=>{
    return a+b
}

console.log(sum(1,2))

在这里插入图片描述

函数的实参和形参

  • 形参是我们定义函数时所列举的变量。
  • 实参是我们调用函数时所传递给函数的值。
function selfIntroduce(name,age){   //形参
    console.log(name,age)
}

selfIntroduce("张三",18)  //实参

在这里插入图片描述

arguments

arguments 对象是一个类数组对象,
箭头函数不能使用 arguments

function sayHi(name, message) {
        console.log("Hello " + name + ", " + message);
}function sayHi() {
        console.log("Hello " + arguments[0] + ", " + arguments[1]);
}

示例:

function callName(){
    console.log("arguments",arguments)
    console.log(arguments[0], arguments[1],arguments[2]);
}
callName("张三","李四","王五")

在这里插入图片描述

默认参数

function callName(name="张三"){
    console.log(name)
    //arguments不反应默认的值,只反映传递的参数
    console.log(arguments.length)
    console.log("-----------------")
}

callName("李四")
callName()

在这里插入图片描述

参数的拓展和收集

拓展参数

在给函数传参时,有时候可能不需要传一个数组,而是要分别传入数组的元素

let values=[1,2,3,4,5]
function getSum(){
    let sum=0

    for (let i = 0; i < arguments.length; i++) {
        sum+=arguments[i]
    }
    return sum
}

//不使用拓展操作符
console.log(getSum.apply(null,values))
//使用拓展操作符
console.log(getSum(...values));

在这里插入图片描述

收集参数

使用扩展操作符把不同长度的独立参数组合为一个数组。
类似arguments 对象的构造机制,只不过收集参数的结果会得到一个 Array 实例。

function getNumber(...values){
    console.log(values)
}

getNumber(2, 4, 6, 8, 10)

在这里插入图片描述

return

return语句终止函数的执行,并返回一个指定的值给函数调用者。

function getNumber(){
    return 1+1
}

var num=getNumber()
console.log(num)

在这里插入图片描述

匿名函数

var double = new Function('x', 'return 2 * x;');

函数表达式

var square = function(x) { 
	return 2* x; 
}

自执行函数

自发执行的函数,无需调用

(function (x,y){
    console.log(x+y)
} )(2,3)

在这里插入图片描述

函数的存储

函数是也是一种对象,所以也是存储在堆中

function add(x, y) {
        return x + y
}

在这里插入图片描述

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

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

相关文章

QUIC来了!

什么是QUIC QUIC&#xff0c;快速UDP网络连接(Quick UDP Internet Connection)的简称&#xff0c;即RFC文档描述它为一个面向连接的安全通用传输协议。其基于UDP协议实现了可靠传输及拥塞控制&#xff0c;简单来说&#xff0c;QUIC TCP TLS。 为什么有了QUIC HTTP2.0为了为了…

如何处理微服务之间的通信和数据一致性?

✨✨祝屏幕前的兄弟姐妹们每天都有好运相伴左右&#xff0c;一定要天天开心哦&#xff01;✨✨ &#x1f388;&#x1f388;作者主页&#xff1a; 喔的嘛呀&#x1f388;&#x1f388; 目录 引言 一、微服务通信 1、同步通信&#xff1a;HTTP 1.1.同步通信示例代码&#xf…

第四十九回 吴学究双掌连环计 宋公明三打祝家庄-Python与HTTP服务交互

吴用请戴宗从梁山请来铁面孔目裴宣、圣手书生萧让、通臂猿侯健、玉臂匠金大坚来帮忙。又告诫扈家庄的扈成&#xff0c;打起来不要去帮祝家庄。 孙立把旗号改成“登州兵马提辖孙立”&#xff0c;来祝家庄找峦廷玉&#xff0c;被热情接待。 第三天&#xff0c;宋江派小李广花荣…

Vue 路由功能

安装路由 npm install vue-router4创建路由器并导出 //导入vue-router import { createRouter, createWebHistory } from vue-router //导入组件 import LoginVue from /views/Login.vue import LayoutVue from /views/Layout.vue//定义路由关系 const routes [{ path: /log…

安卓玩机工具推荐----ADB状态读写分区 备份分区 恢复分区 查看分区号 工具操作解析

在以往玩机过程中。很多机型备份分区 备份固件需要借助adb手动指令或者第三方手机软件或者特定的一些工具来操作。有些朋友需要查看当前机型分区名称和对应的分区号。此类操作我前面的博文专门说过对应的adb指令。但有些界面化的工具比较方便简单。 相关分区同类博文&#xff…

WPF中如何设置自定义控件(二)

前一篇文章中简要讲解了圆角按钮、圆形按钮的使用,以及在windows.resource和app.resource中设置圆角或圆形按钮的样式。 这篇主要讲解Polygon(多边形)、Ellipse(椭圆)、Path(路径)这三个内容。 Polygon 我们先看一下的源码: namespace System.Windows.Shapes { pu…

性能问题分析排查思路之机器(3)

本文是性能问题分析排查思路的展开内容之一&#xff0c;第2篇&#xff0c;主要分为日志1期&#xff0c;机器4期、环境2期共7篇系列文章&#xff0c;本期是第三篇&#xff0c;讲机器&#xff08;硬件&#xff09;的网络方面的排查方法和最佳实践。 主要内容如图所示&#xff1a…

【短时交通流量预测】基于单层BP神经网络

课题名称&#xff1a;基于单层BP神经网络的短时交通流量预测 版本时间&#xff1a;2023-04-27 代码获取方式&#xff1a;QQ&#xff1a;491052175 或者 私聊博主获取 模型简介&#xff1a; 城市交通路网中交通路段上某时刻的交通流量与本路段前几个时段的交通流量有关&…

【计算机学习】-- 电脑的组装和外设

系列文章目录 文章目录 系列文章目录前言一、电脑的组装1.CPU2.主板3.显卡4.硬盘5.内存6.散热器7.电源8.机箱 二、电脑外设选用1.显示器2.鼠标3.键盘4.音响 总结 前言 一、电脑的组装 1.CPU 返回目录 认识CPU CPU&#xff0c;即中央处理器&#xff0c;负责电脑资源的调度安…

器件选型【电容,电阻篇】

电阻篇&#xff1a; 一句话先做总结&#xff1a;电阻的选型主要考虑额定电压和过流能力&#xff08;基于封装大小&#xff09; 电阻封装规格越大功率越大。但其功率也与温度有关&#xff0c;如果温度超过 70℃&#xff0c;其额定功率是会下降的。并且&#xff0c;R01005 和 R0…

#QT(串口助手-实现)

1.IDE&#xff1a;QTCreator 2.实验 3.记录 &#xff08;1&#xff09;在widget.h中加入必要文件&#xff0c;并且定义一个类指针 &#xff08;2&#xff09;如果有类的成员不知道怎么写&#xff0c;可以通过以下途径搜索 &#xff08;2&#xff09;设置串口数据 void Widget…

AI大全-通往AGI之路

背景 自从AI大模型出来之后&#xff0c;就有很多做资源整理的社区&#xff0c;整理学习资料&#xff0c;整理各种AI工具大全&#xff0c;我也整理过一段时间的最新AI的资讯&#xff0c;也曾尝试去弄一个AI的入口类的东西。但是最近看到一个在飞书上的分享&#xff0c;我觉得他…

IDEA自带 .http 请求工具文档

基础语法 请求格式 基础格式 Method Request-URI HTTP-Version Header-field: Header-valueRequest-Body其中&#xff0c;GET 请求可以省略 Method 不写&#xff1b;HTTP-Version 可以省略不写&#xff0c;默认使用 1.1 版本。 示例&#xff1a; GET https://www.baidu.co…

【Python】成功解决TypeError: list indices must be integers or slices, not float

【Python】成功解决TypeError: list indices must be integers or slices, not float &#x1f308; 个人主页&#xff1a;高斯小哥 &#x1f525; 高质量专栏&#xff1a;Matplotlib之旅&#xff1a;零基础精通数据可视化、Python基础【高质量合集】、PyTorch零基础入门教程&…

GIS之深度学习05:VisualStudio安装教程

在安装CUDA前&#xff0c;建议先安装VisualStudio&#xff0c;以防报错 VisualStudio安装步骤简单&#xff0c;但时间较长。。。。。。 正文开始&#xff1a; VisualStudio官网&#xff1a;Visual Studio: IDE and Code Editor for Software Developers and Teams 点击右上角…

【Docker】若依后端项目搭建

一 搭建局域网 1 # 搭建net-ry局域网&#xff0c;用于部署若依项目docker network create net-ry --subnet172.68.0.0/16 --gateway172.68.0.1 # 注意1&#xff1a;关闭宿主机的防火墙&#xff0c;否者容器内部的MySQL、redis等服务&#xff0c;外部访问不了&#xff1b;开放…

Stream流(Java)

目录 一、介绍 二、Stream流的使用步骤 三、Stream流常见的中间方法 四、Stream流常见的终结方法 一、介绍 Stream也叫Stream流&#xff0c;是JDK8开始新增的一套API&#xff0c;可以用于操作集合或者数组的数据。 优势&#xff1a;Stream流大量的结合了Lambda的语法风格来…

【PHP】PHP实现与硬件串口交互,向硬件设备发送指令数据(下)

目录 一、前言 二、 效果图 三、安装PHP扩展 四、添加模拟串口 五、PHP发送数据给硬件 PHP代码 前端代码 一、前言 上篇文章写到PHP怎么与硬件串口交互之实时接收硬件发送的数据&#xff0c;这里同样是以天平为例&#xff0c;介绍怎么向硬件设备发送数据&#xff0c; 需…

MySQL高可用性攻略:快速搭建MySQL主从复制集群 !

MySQL高可用性攻略&#xff1a;快速搭建MySQL主从复制集群 &#xff01; MySQL基础知识&#xff1a;介绍MySQL数据库的基本概念和常用命令&#xff0c;如何创建数据库、表、用户和权限管理等。 MySQL安装教程&#xff1a;Centos7 安装MySQL5.7.29详细安装手册 MySQL数据类型&…

【仿真基本功】【PyTorch】从头安装PyTorch(GPU版本)【2024/03/03更新】

【仿真基本功】【PyTorch】从头安装PyTorch&#xff08;GPU版本&#xff09;【2024/03/03更新】 安装步骤1. 安装Anaconda2. 查看显卡对CUDA版本的支持3. 查看PyTorch的安装需求4. 安装PyTorcha) 配置新环境b) 进入新环境c) 按照CUDA版本要求&#xff0c;必须小于等于显卡支持的…