整理:JS基础
1.注释
// This is an in-line comment.
/* This is a
multi-line comment */
2.数据类型
undefined(未定义), null(空), boolean(布尔型), string(字符串), symbol(符号), number(数字), and object(对象)
变量声明未赋值,默认为undefined
当你对一个值为undefined的变量进行运算操作的时候,算出来的结果将会是NaN,NaN的意思是“不是数字”。
你当用一个没有定义的变量来做字符串连接操作的时候,它会如实的输出"undefined"。
布尔值要么是true 要么是false。它非常像电路开关, true 是“开”,false 是“关”。这两种状态是互斥的。
Boolean 值绝不会写作被引号包裹起来的形式。字符串 的 "true" 和 "false" 不是 布尔值,在 JavaScript 中也没有特殊含义。
严格相等运算符(===)是相对于相等操作符(==)的一种操作符。与相等操作符不同的是,它会同时比较元素的值和 数据类型。
3 === 3 // true
3 === '3' // false
与相等运算符一样,大于运算符在比较的时候,会转换值的数据类型。
5 > 3 // true
7 > '3' // true
2 > 3 // false
'1' > 9 // false
3.变量名
最佳实践使用 驼峰命名法 来书写一个 Javascript 变量
变量名的第一个单词的首写字母小写,后面的单词的第一个字母大写。
4.转义引号
在 JavaScript 中,你可以通过在引号前面使用 反斜杠 (\) 来转义引号。
var myStr = "I am a \"double quoted\" string inside \"double quotes\"";
\' 单引号
\" 双引号
\\ 反斜杠符
\n 换行符
\r 回车符
\t 制表符
\b 退格符
\f 换页符
5.[]叫中括号,{}叫大括号,()叫小括号
字符串类型通过[索引] 来获得对应的字符
var firstLetterOfLastName = "";
var lastName = "Lovelace";
firstLetterOfLastName = lastName[0];
6.字符串的值是不可变的。这意味着一旦字符串被创建就不能被改变。(延伸:immutable.js)
并不 意味着 myStr 永远不能被改变,只是字符串字面量 string literal 的各个字符不能被改变。改变 myStr 中的唯一方法是重新给它赋一个值
str.indexOf(searchValue)
str.indexOf(searchValue, fromIndex)
indexOf() 方法返回调用它的 String 对象中第一次出现的指定值的索引,从 fromIndex 处进行搜索。如果未找到该值,则返回 -1。
7.数组
一个简单的方法将数据追加到一个数组的末尾是通过 push() 函数。
.push() 接受把一个或多个参数,并把它“推”入到数组的末尾。
var myArray = [["John", 23], ["cat", 2]];
myArray.push(["dog",3]);
.pop() 函数用来“抛出”一个数组末尾的值。我们可以把这个“抛出”的值赋给一个变量存储起来。
数组中任何类型的条目(数值,字符串,甚至是数组)可以被“抛出来” 。
var oneDown = [1, 4, 6].pop();
现在 oneDown 的值为 6 ,数组变成了 [1, 4]。
.shift() 它的工作原理就像 .pop(),但它移除的是第一个元素,而不是最后一个。
var myArray = [["John", 23], ["dog", 3]];
var removedFromMyArray = myArray.shift();
你不仅可以 shift(移出)数组中的第一个元素,你也可以 unshift(移入)一个元素到数组的头部。
.unshift() 函数用起来就像 .push() 函数一样, 但不是在数组的末尾添加元素,而是在数组的头部添加元素。
var ourArray = ["Stimpson", "J", "cat"];
ourArray.shift(); // 经过 shift 操作后,ourArray 的值为 ["J", "cat"]
ourArray.unshift("Happy"); // 经过 unshift 操作后,ourArray 的值为 ["Happy", "J", "cat"]
arr.slice([begin[, end]])
slice()方法返回一个新的数组对象,这一对象是一个由 begin 和 end 决定的原数组的浅拷贝(包括 begin,不包括end)。原始数组不会被改变。
8.函数
把代码的重复部分抽取出来,放到一个函数(functions)中
function functionName() {
console.log("Hello World");
}
函数的调用——通过函数名称functionName加上后面的小括号来调用这个函数
functionName();
函数的参数parameters在函数中充当占位符(也叫形参)的作用,参数可以为一个或多个。调用一个函数时所传入的参数为实参,实参决定着形参真正的值。简单理解:形参即形式、实参即内容。
function testFun(param1, param2) {
console.log(param1, param2);
}
testFun("Hello", "World");
我们可以把数据通过函数的 参数 来传入函数,也可以使用 return 语句把数据从一个函数中传出来。
function plusThree(num) {
return num + 3;
}
var answer = plusThree(5); // 8
在计算机科学中 队列(queue)是一个抽象的数据结构,队列中的条目都是有秩序的。新的条目会被加到 队列 的末尾,旧的条目会从 队列 的头部被移出。
写一个函数 queue ,用一个数组arr和一个数字item作为参数。数字item添加到数组的结尾,然后移出数组的第一个元素,最后队列函数应该返回被删除的元素。
function queue(arr, item) {
// 请把你的代码写在这里
arr.push(item);
item = arr.shift();
return item; // 请修改这一行
}
// 初始化测试数据
var testArr = [1,2,3,4,5];
// 控制台输出
console.log("Before: " + JSON.stringify(testArr));
console.log(queue(testArr, 6)); // 你可以修改这一行来测试你的代码
console.log("After: " + JSON.stringify(testArr));
9.作用域
在 JavaScript 中, 作用域 涉及到变量的作用范围。在函数外定义的变量具有 全局 作用域。这意味着,具有全局作用域的变量可以在代码的任何地方被调用。
这些没有使用var关键字定义的变量,会被自动创建在全局作用域中,形成全局变量。当在代码其他地方无意间定义了一个变量,刚好变量名与全局变量相同,这时会产生意想不到的后果。因此你应该总是使用var关键字来声明你的变量。
在一个函数内声明的变量,以及该函数的参数都是局部变量,意味着它们只在该函数内可见。
function myTest() {
var loc = "foo";
console.log(loc);
}
myTest(); // "foo"
console.log(loc); // "undefined"
在函数外,loc 是未定义的。
一个程序中有可能具有相同名称的 局部 变量 和 全局 变量。在这种情况下,局部 变量将会优先于 全局 变量。(先找当前作用域,再往外找)
var someVar = "Hat";
function myFun() {
var someVar = "Head";
return someVar;
}
函数 myFun 将会返回 "Head",因为 局部变量 优先级更高。