JS(二) | 青训营

74 阅读6分钟

变量

  1. 创建常量: const+名字

  2. 创建变量: let+名字 或者var,初始值为undefine,或者布尔中的false(来判断是否赋值,数值为NaN

null 数值类型为0,布尔为false

let不能多次声明有相同名称的变量,但是var能,一般用于局部变量

var可以先初始化再定义,但是let不能。语句块中声明的变量将成为全局作用域的局部变量

  1. 变量提升

先使用变量稍后再声明变量而不会引发异常,适用于var,提升后的变量返回undefined

函数提升:

只有函数声明会被提升到顶部,而函数表达式不会被提升

foo(); // "bar"

function foo() {

console.log("bar");}

  1. 全局变量

全局变量是全局对象的属性

  1. 暂时性死区

使用let命令声明变量之前,该变量都是不可用的。在if语句块里,let声明tmp之前都是tmp的暂时性死区


ar tmp = 123;

  


if (true) {

tmp = 'abc'; // ReferenceError

let tmp;}

  1. 类型 Number,String,Boolean,null(注意大小写敏感),undefined,BigInt(任意精度的整数),Symbol七种数据类型和Object.
  • Array

创建数组:


const arr1 = new Array(element0, elementN);

const arr2 = Array(element0, elementN);

const arr3 = [element0, elementN];


const arr3 = [];

arr3.length = arrayLength;

const arr2 = Array(arrayLength)

const arr1 = new Array(arrayLength)

数组与对象


const obj = {};

obj.prop = [element0, element1, /* … ,*/ elementN];

// 或

const obj = { prop: [element0, element1, /* … ,*/ elementN] };

X.unshift() 和 X.shift() 数组的开始与结尾

X.push(),X.pop()

X.concat()连接两个或多个数组


let myArray = ['1', '2', '3'];

myArray = myArray.concat('a', 'b', 'c');

// myArray 现在是 ["1", "2", "3", "a", "b", "c"]

X.split(Y) 需要一个参数,您要将字符串分隔的字符,并返回分隔符之间的子串,作为数组中的项

使用X. join(Y) 方法进行相反的操作

使用X. toString() 方法,不需要一个参数,默认是逗号

  • object

let dog={name: 'xiao', breed :'Dalmation'};

//搜索采用dog.name

动态类型:typeof,给一个变量赋值不同的数据类型

  • 字符串:

字符串是不变的类数组对象,一旦确定就无法修改

当数字和字符串用‘+’,数字转换为字符串,并将这两个字符串连接在一起,

Number(X)对象将把传递给它的任何东西转换成一个数字、

"37" - 7 // 30 "37" + 7 // "377"

parseInt,parseFloat返回整数或浮点数,或者一元加法运算符


"1.1" + "1.1" = "1.11.1"

(+"1.1") + (+"1.1") = 2.2

// 注意:加入括号为清楚起见,不是必需的。

 X.toString() 的方法,它将把它转换成等价的字符串.

X.length,X.indexOf(Y)查找字串并返回第一个元素的下标

X.slice(x,y)知道字符串中的子字符串开始的位置,以及到想要结束的字符下标(不包括结束的字符)

X.slice(x)在某个字符下标之后提取字符串中的所有剩余字符(包括当前字符下标)

X.toLowerCase()和X.toUpperCase()字符串并将所有字符分别转换为小写或大写

Z.replace(X,Y)方法将字符串中的一个子字符串替换为另一个子字符串

字符串对象:


const foo = new String('foo'); // 创建一个 String 对象

console.log(foo); // 输出:[String: 'foo']

typeof foo; // 返回 'object'

模板字符串:反勾号:· ·


const five = 5;

const ten = 10;

console.log(`Fifteen is ${five + ten} and not ${2 * five + ten}.`);

// "Fifteen is 15 and not 20."

  • Number:

数字对象:有关数字的常量属性,不能改变这些属性(只能从Number中引用,而不是自己创建的)但可以使用他们


var infiniteNum = Number.POSITIVE_INFINITY;

var negInfiniteNum = Number.NEGATIVE_INFINITY

数学对象(Math):Math.PI //3.14等

日期对象(Data):没有属性,月份0~11(一月到12月)


var today = new Date();

//当前时间

var endYear = new Date(1995, 11, 31, 23, 59, 59, 999);

endYear.setFullYear(today.getFullYear()); // 把年设置为今年

var msPerDay = 24 * 60 * 60 * 1000; // 每天的毫秒数

var daysLeft = (endYear.getTime() - today.getTime()) / msPerDay;

var daysLeft = Math.round(daysLeft); //返回今年剩下的天数

  


字符串转化为数字:parseInt或者一元加法运算符

(+"1.1") + (+"1.1") = 2.2// 注意:加入括号为清楚起见,不是必需的。

  1. 字面量

字面量是由语法表达式定义的常量;或,通过由一定字词组成的语词表达式定义的常量

  • 数组字面量:

JavaScript 语言将会在每次对包含该数组字面值的表达式求值时解释该数组。另一方面,在函数中使用的数组,将在每次调用函数时都会被创建一次。

数组字面值同时也是数组对象

  • 布尔字面量:

不要混淆作为布尔对象的真和假与布尔类型的原始值 true 和 false。布尔对象是原始布尔数据类型的一个包装器

  • 数字字面量:

语言标准要求数字字面量必须是无符号的。但是像-123.4这样的代码片段还是没有问题的,会被解释为一元操作符-应用于数字字面量123.4

  • 整数字面量:

八进制的整数以 0(或 0O、0o)开头,只能包括数字 0-7

二进制整数以 0b(或 0B)开头,只能包含数字 0 和 1

  • 浮点数字面量

-.2345789 // -0.23456789

-3.12e+12 // -3.12*10^12

  • 对象字面量:

如果对象属性名字不是合法的 javascript 标识符,它必须用""包裹

通过类数组标记 ("[]") 访问和赋值


var unusualPropertyNames = {

"": "An empty string",

}

console.log(unusualPropertyNames.""); // 语法错误:Unexpected string

console.log(unusualPropertyNames[""]); // An empty string

  • RegExp字面量:

正则表达式是字符被斜线(译注:正斜杠“/”)围成的表达式


var re = /ab+c/;

//保持不变则可以使用字面量

var red=new RegExp("ab+c");

//正则表达式需要改变用构造函数创建


/Chapter (\d+)\.\d*/

//用到了括号这部分所匹配的字符会被记住以备后续使用

  


/ab*c/

//*的意思是前一项出现零次或者多次

断言:表示匹配在某些情况下发生(如以某个字符开头)

字符类:区分不同类型字符,例如字母和数字

组和范围:表示表达式字符的分组和范围

量词:表示匹配的字符和数量

Unicode属性转义

反斜杠:‘\’转义具有特殊字符的字面值,构造函数使用\

使用正则表达式:


var myRe = /d(b+)d/g;

var myArray = myRe.exec("cdbbdbsbz");

  


var myRe = new RegExp("d(b+)d", "g");

var myArray = myRe.exec("cdbbdbsbz");

  


//dbbd

exec与match区别,exec输出数组[ "dbbd", "bb", index: 1, input: "cdbbdbsbz" ]而match输出[ "dbbd" ]


var myArray = /d(b+)d/g.exec("cdbbdbsbz");

console.log("The value of lastIndex is " + /d(b+)d/g.lastIndex);

//The value of lastIndex is 0

需要访问一个正则表达式的属性,则需要创建一个对象初始化生成器,你应该首先把它赋值给一个变量

  • 字符串字面量:

在字符串字面值上使用字符串对象的所有方法——JavaScript 会自动将字符串字面值转换为一个临时字符串对象,调用该方法,然后废弃掉那个临时的字符串对象

字符串是不变的类数组对象