走进JavaScript运算符与流程控制

简介: 走进JavaScript运算符与流程控制

走进js运算符与流程控制

前端访问流程

前端的代码是在浏览器运行的,而服务器只是相当于一个文件托管(在在不进行服务端渲染的情况下)。

作用域

作用域不同可以声明相同的变量名,如:

const a = "qwer";
function add() {
  const a = "zxcv";
}

可以正常运行

变量的声明

在声明变量时,js 会开辟一个内存空间。

const a = "qwer";
const a = "asdf"; //报错
let b = "zxcv";
let b = "dfgh"; //报错
var c = "jjj";
var c = "ggg"; //不会报错

这里 a 指向的是字符串qwer的内存空间,而再次声明(同一作用域),则会让变量名指向新的内存空间,而对于const和let是不允许的,用var可以。

对于 Number,String 等原始类型,让变量 1 赋值给变量 2,会直接开辟一块新的内存空间。当变量 1 中内存空间的值改变,不会引起变量 2 的值的改变。

对于 Object 引用类型,让变量 1 赋值给变量 2,变量 2 会指向变量 1 的内存空间,当变量 1 的值发生改变时,变量 2 的值也会改变(浅拷贝)。

let numOne = 1;
let numTwo = numOne;
numOne = 2;
console.log(numOne); //2
console.log(numTwo); //1

const a = { name: "xiaozhou" };
const b = a;
b.name = "xiaoming";
console.log(a); //{name:xiaoming}
console.log(b); //{name:xiaoming}

Object.freeze()

对于对象,就算 const 声明对象,但还是可以更改对象属性。

如果不想让对象的属性被修改,可以使用 Object.freeze()方法。

const Host_ = {
  url: "xiaoxiao",
  port: "3000",
};

Object.freeze(Host_);
Host_.port = "80";
console.log(Host_);

const&let 暂时性死区 TDC

var,let,const 都能在编译时进行变量提升,但只有 var 会把值初始化为 undefined。

console.log(a);//undefined
console.log(b);//报错
console.log(c);//报错
var a = 1;
let b = 2;
const c = 3;
console.log(a);//1
console.log(b);//2
console.log(c);//3

window 全局对象

如 window.name 是窗口名称,如果用 var 声明变量,可能会覆盖掉 window 全局对象的属性。

函数默认值

ES6开始已经支持默认参数了

function multiply(a, b = 1) {
  return a * b;
}

multiply(5); // 5

ES6 原生选择器

1.querySelector

element = document.querySelector(selectors);

element 是一个 element对象(DOM 元素)。
selectors 是一个字符串,包含一个或是多个 CSS 选择器 ,多个则以逗号分隔。
找到一个后立刻返回找到的第一个节点对象,如果没有则返回 null

2.querySelectorAll

var matches = document.querySelectorAll("div.note, div.alert");

找出所有匹配的节点后,返回对应的元素节点数组

js 的一些运算上特性

在给变量赋值时使用逻辑运算符:或||的时候,会将为真(非 0)的值,赋值给变量。

let a = 0;
let b = 2;
let f = b || a;
let g = a || b;
console.log(f); //2
console.log(g); //2

可以利用这个特性赋值

let sex = prompt("输入数据") || "保密"; //'保密'是真
console.log(sex); //输入内容非空时(真),将输入的内容赋值给sex。若为空,则赋值“保密”

// es6中可以用函数参数默认值来实现
function copy(num) {
  return "*|".repeat(num || 5);
}
console.log(copy(3)); // 输出*|*|*|(复制三次)
console.log(copy()); // 输出*|*|*|*|*|(复制五次)

原生 js 的弹窗

alert() 弹出个提示框 (确定)
confirm() 弹出个确认框 (确定,取消)
prompt() 弹出个输入框 让你输入东西

es6 中的 repeat()

string.repeat () 方法通过将给定字符串复制并连接指定次数来返回一个新字符串。参数为复制的次数。

const s = "*|";
function copy(num) {
  console.log(s.repeat(num));
}
copy(3); // 输出*|*|*|(复制三次)

es6 对象赋值(对象的解构赋值)

const obj = { name: "xiaozhou", age: "18", weight: "60" };
const { name, age, weight } = obj; //对象的解构赋值
const obj1 = ({ name, age, weight } = obj); //连等是从右往左执行的
console.log(name, age, weight); //xiaozhou 18 60
console.log(obj1); //{ name: 'xiaozhou', age: '18', weight: '60' }
相关文章
|
JavaScript 前端开发
JavaScript基础知识-流程控制之while循环
这篇文章介绍了JavaScript中的while循环和do...while循环的基础知识,并通过一个实际案例演示了如何使用while循环计算投资增长到特定金额所需的年数。
402 2
JavaScript基础知识-流程控制之while循环
|
搜索推荐 Shell
bpmn-js打造最强flowable流程设计器
在企业系统中,流程引擎至关重要。Flowable虽强大,但默认设计器功能有限。本文基于 bpmn-js 打造增强版 Flowable 设计器,支持丰富自定义属性与后端联动。bpmn-js 优势明显:原生支持 BPMN 2.0、可扩展性强、社区活跃。节点涵盖多种事件、任务、网关等,满足复杂业务需求。示例效果可见在线预览。
1749 73
|
JavaScript 前端开发
JavaWeb JavaScript ③ JS的流程控制和函数
通过本文的详细介绍,您可以深入理解JavaScript的流程控制和函数的使用,进而编写出高效、可维护的代码。
400 32
|
JavaScript 前端开发
JavaScript基础知识-流程控制之for循环
这篇文章讲解了JavaScript中的for循环的基础知识,并通过一个实例演示了如何使用for循环来找出所有的三位水仙花数。
299 6
JavaScript基础知识-流程控制之for循环
|
监控 JavaScript 算法
深度剖析 Vue.js 响应式原理:从数据劫持到视图更新的全流程详解
本文深入解析Vue.js的响应式机制,从数据劫持到视图更新的全过程,详细讲解了其实现原理和运作流程。
|
JavaScript
js运算符
js运算符
295 5
|
JavaScript 前端开发
JavaScript 运算符
JavaScript 运算符
183 3
|
前端开发 JavaScript 程序员
聊聊前端 JavaScript 的扩展运算符 “...“ 的使用场景
聊聊前端 JavaScript 的扩展运算符 “...“ 的使用场景
469 4
|
JavaScript 安全 数据安全/隐私保护
深入Node.js与Express:从表单接收到数据验证的完整指南——实战技巧揭秘后端开发中的表单处理流程
【8月更文挑战第31天】在Web开发中,处理表单数据至关重要。本文通过实例详细讲解了如何利用Node.js与Express框架接收和验证表单数据。首先,搭建环境并初始化一个简单的Express应用;接着,演示如何接收用户注册表单中的`username`和`email`字段;最后,引入`joi`模块进行数据验证,确保数据安全准确。掌握这些技能有助于开发者构建更安全、友好的Web应用。随着Node.js和Express的不断进步,未来将有更多高级功能值得期待。
662 1
|
JavaScript 前端开发
JavaScript 中的 typeof 运算符
【8月更文挑战第29天】
402 1