JavaScript 算法和数据结构之——基础JavaScript 笔记

发布时间 2023-07-02 22:13:34作者: goicandoit

做整理是为了知识更加系统一些,遂记录
参考资料

js基础算法

JavaScript 字符串

可以用单引号或双引号

查找字符串长度

.length

空格符也会计算在内

使用方括号查找字符串中的第一个字符

方括号表示法(Bracket notation)是一种在字符串中的特定 index(索引)处获取字符的方法

xxx[0]获取字符串第一个字符

字符串的不变性

字符串要变整个改掉,不能用xxx[0]这样改

方括号查找字符串中的第 N 个字符

xxx[N-1]即可

方括号查找字符串中的最后一个字符

xxx[xxx.length-1]

方括号查找字符串中的倒数第 N 个字符

xxx[xxx.length-N]

填词

字符串变量:myNounmyAdjectivemyVerbmyAdverb

字符串 const wordBlanks = "The"+" "+myAdjective+" "+myNoun+" "+myVerb+" "+myAdverb;

数组

js数组将多个值存储在一个变量中

const myArray = ["hi",3];

将一个数组嵌套在另一个数组中

const teams = [["Bulls", 23], ["White Sox", 45]];

也叫做多维数组(multi-dimensional array)

通过索引访问数组中的数据

和字符串时一样

通过索引修改数组中的数据

const myArray = [18, 64, 99];

myArray[0] = 45;

修改索引0的值

使用索引访问多维数组

可以把多维数组看作成是数组中的数组

使用括号访问数组时,第一组括号指的是最外层(第一层)数组中的条目

通过每一对额外的括号指向里面下一层的条目

const arr = [
  [1, 2, 3],
  [4, 5, 6],
  [7, 8, 9],
  [[10, 11, 12], 13, 14]
];

const subarray = arr[3];
const nestedSubarray = arr[3][0];
const element = arr[3][0][1];

注意:数组和方括号之间不允许加空格

使用 push 方法操作数组---数据添加到数组末尾

一个将数据添加到数组末尾的简单方法是 push() 函数

.push() 接受一个或多个参数(parameters),并把它压入到数组的末尾

const arr1 = [1, 2, 3];
arr1.push(4);

const arr2 = ["Stimpson", "J", "cat"];
arr2.push(["happy", "joy"]);

运行后arr1 值为 [1, 2, 3, 4]arr2 值为 ["Stimpson", "J", "cat", ["happy", "joy"]]

使用 pop 方法操作数组---弹出数组末尾的值并返回这个元素

.pop() 函数用来弹出一个数组末尾的值

可以把这个弹出的值赋给一个变量存储起来

换句话说就是 .pop() 函数移除数组末尾的元素并返回这个元素

数组中任何类型的元素(数值,字符串,甚至是数组)都可以被弹出来

使用 shift 方法操作数组---移除数组首项的值并返回这个元素

.shift() ,它的工作原理就像 .pop(),但它移除的是第一个元素

const ourArray = ["Stimpson", "J", ["cat"]];
const removedFromOurArray = ourArray.shift();//注意需要定义变量

removedFromOurArray 值为 StimpsonourArray 值为 ["J", ["cat"]]

使用 unshift 方法操作数组---在数组的头部添加元素

不仅可以移出,也可以 unshift(移入)一个元素到数组的头部

const ourArray = ["Stimpson", "J", "cat"];
ourArray.shift();
ourArray.unshift("Happy");

shiftourArray 值为 ["J", "cat"]。 在 unshiftourArray 值为 ["Happy", "J", "cat"]

购物清单---创建多位数组

创建多维数组,方法很多:

const myList = [["Chocolate Bar",15],["qingcai",3],["caihua",4],["guobaorou",10],["zhajitui",5]];
const myList = [];
myList.push(["Chocolate Bar",15]);
myList.push(["qingcai",3]);
myList.push(["caihua",4]);
myList.push(["guobaorou",10]);
myList.push(["zhajitui",5]);

函数

用函数编写可复用代码

可以把代码的重复部分抽取出来,放到一个函数 (functions)中

function functionName() {
  console.log("Hello World");
}

每次调用functionName时,都会运行大括号内的内容

将值传递给带有参数的函数

函数的参数 (parameters)在函数调用中充当传入函数的输入占位符(也叫形参)

function testFun(param1, param2) {
  console.log(param1, param2);
}

调用函数的时候如果没有输入两个参数则会输出NaN

使用 return 给函数返回值

我们可以通过函数的参数(arguments)把值传入函数, 也可以使用 return 语句把数据从一个函数中传出来

function plusThree(num) {
  return num + 3;
}

const answer = plusThree(5);

全局作用域和函数

作用域涉及到变量的作用范围

在函数外定义的变量具有 全局 作用域

也就是具有全局作用域的变量可以在代码的任何地方被调用

未使用 letconst 关键字声明的变量会在 global 范围内自动创建

当在代码其他地方无意间定义了一个变量,刚好变量名与全局变量相同,这时会产生意想不到的后果

你应该总是用 letconst 声明你的变量

const myGlobal=10;

function fun1() {
  oopsGlobal=5;
}
fun1();

function fun2() {
  let output = "";
  if (typeof myGlobal != "undefined") {
    output += "myGlobal: " + myGlobal;
  }
  if (typeof oopsGlobal != "undefined") {
    output += " oopsGlobal: " + oopsGlobal;
  }
  console.log(output);
};
fun2()

输出myGlobal: 10 oopsGlobal: 5

局部作用域和函数

在一个函数内声明的变量,以及该函数的参数都具有局部(local)作用域

也就是它们只在该函数内可见

function myTest() {
  const loc = "foo";
  console.log(loc);
}

myTest();
console.log(loc);

外面的console.log就会抛出错误

函数中的全局作用域和局部作用域---局部变量优先级更高

一个程序中有可能具有相同名称的局部变量 和全局变量

在这种情况下,局部变量将会优先于全局变量

const someVar = "Hat";

function myFun() {
  const someVar = "Head";
  return someVar;
}

函数 myFun 将会返回字符串 Head

函数也可以返回 undefined---没有return时

函数一般用 return 语句来返回值,但这不是必须的

在函数没有 return 语句的情况下,当你调用它时,该函数会执行内部代码,返回的值是 undefined

let sum = 0;

function addSum(num) {
  sum = sum + num;
}

addSum(3);

返回值为undefined

使用返回值赋值---在return时计算

可以获取函数的返回值,并将其赋值给一个变量

let processed = 0;

function processArg(num) {
  return (num + 3) / 5;
}

processed=processArg(7)

队列---新条目进旧条目出

把数字添加到数组的结尾,然后移出数组的第一个元素

function nextInLine(arr, item) {
  arr.push(item);
  return item=arr.shift();
}

// 设置
let testArr = [1, 2, 3, 4, 5];

// 显示代码
console.log("Before: " + JSON.stringify(testArr));
console.log(nextInLine(testArr, 6));
console.log("After: " + JSON.stringify(testArr));

理解布尔值

数据类型布尔(Boolean)

布尔值只能是两个值中的一个:true 或者 false

注意: 布尔值是不带引号的。 字符串 "true""false" 不是布尔值,在 JavaScript 中也没有特殊含义。

用 if 语句来表达条件逻辑

关键字 if 告诉 JavaScript 在小括号中的条件为真的情况下去执行定义在大括号里面的代码

这种条件被称为 Boolean 条件,因为他们只可能是 true(真)或 false(假)

//伪代码
if(条件为真){
语句被执行
}
function trueOrFalse(wasThatTrue) {
  if(wasThatTrue){
    return "Yes, that was true"
  }
  return "No, that was false"
}

如果参数 wasThatTrue 值为 true,返回 Yes, that was true,否则,返回No, that was false