Javascript基本语法速查

483 阅读4分钟

大家好,我是言淦,我今天带来的文章是《Javascript基本语法速查》,希望能给你们带来帮助!

1.变量

ES6规范之前, Js定义变量的方式只有一种,即var; 在ES6规范到来后,Js定义变量的方式有三种,var, let和const。

var: 使用var声明变量有两个”bug“, 第一是没有块级作用域; 第二是循环内变量过度共享。
let: 解决上述var声明的两个bug, 可以说let是更完美的var。
const:定义常量

变量提升

  • 函数及变量的声明都将被提升到函数的最顶部
  • 变量可以在使用后声明,也就是变量可以先使用再声明

参考: www.jianshu.com/p/4e9cd99ec…

数据类型

值类型(基本类型):

  • 字符串(String)
  • 数字(Number)
  • 布尔(Boolean)

引用类型:

  • 对象(Object)
  • 数组(Array)

值类型和引用类型区别:

// 值类型(d的值不会跟着c变)
> c = 1
 1
> d = c
 1
> c = 2
 2
> d
 1

// 引用类型(l2的值会跟着l变)
> a = [1, 2, 3]
(3) [1, 2, 3]
> a2 = a
(3) [1, 2, 3]
> a[0] = 4
4
> a2
(3) [4, 2, 3]

Number类型

1.Javascript不区分整数和浮点数,统一用Number表示
2.Number类型中的NaN表示Not a Number,当无法计算结果时用NaN表示;NaN与其他值都不相等,包括它自己,唯一能判断NaN的方法是通过isNaN()函数(isNaN(NaN); // true)。
3.Number类型中的Infinity表示无限大,当数值超过了JavaScript的Number所能表示的最大值时,就表示为Infinity

// Number转 String
let num = 11
num.toString()

// 判断是否是Number类型
// 1.isInteger,推荐,但只在ES6中支持
Number.isInteger(num)  // true

// 2.Math.floor, 推荐
Math.floor(num) === num

// 3.typeof,第二推荐
typeof num === 'number'

// 判断是否是字符串数字
var reg = /^[\d|\.]*$/;

reg.test('aa')  // false
reg.test('111') // true
reg.test('111aa')  // false

字符串类型

在Javascript中,单引号和双引号都能表示字符串

String 转 Number

// 1.Number方法
let num = Number("111")  // 111

let num = Number("111.111")  // 111.111

let num = Number("111.111aaa")  // NaN

let num = Number("023"); // 23

let num = Number(023); // 19,0表示8进制,2*8 + 3 = 19

// 2.ParseInt 和 ParseFloat
let num = parseInt("111.11aa")  // 111

let num = parseInt("aa111")  // NaN

let float = parseFloat("111.11aa") // 111.11

let float = parseFloat("aa111")  // NaN

String 和 Object互转(即JSON)

let obj = {'aa': 1, 'bb': 2}
let json = JSON.stringify(obj)  // "{"aa":1,"bb":2}"

let json1 = '{"aa":1, "bb":2}'
let obj1 = JSON.parse(json1)  // {aa: 1, bb: 2}

其他操作

// 字符串切割
let str = "aa,bb,cc"
str.split(",")  // ["aa", "bb", "cc"]

// 字符串切片
let substr = str.substring(0, 2)  // aa

Array

JavaScript的数组可以包括任意数据类型, 类似Python。另外,JavaScript的数组并不会存在数组越界的问题

数组不会越界

let test = [11, 22, 33]

test[3] // undefined

push 和 pop: push往数组的尾部添加若干元素,pop剔除数组的最后一个元素

let test = [11, 22, 33]


test.push(44, 55) // [11, 22, 33, 44, 55]

let value = test.pop() // value为5,test为[11, 22, 33, 44]

unshift 和 shift: unshift往数组的头部添加若干元素,shift剔除数组第一个元素

// shift
let test = [11, 22, 33]

test.shift()  // 11

test // [22, 33]

// unshift
test.unshift(44, 55)

test //  [44, 55, 22, 33]

判断元素是否存在

let test = [11, 22, 33]

test.indexOf(11) >= 0 // true

浅拷贝与深拷贝:浅拷贝直接赋值

// 1.使用slice
let arr = [1, 2, 3]

let arr2 = arr.slice(0, arr.length)  // [1, 2, 3]
 
arr[0] = 4  // arr: [4, 2, 3]

arr2 // 仍然为[1, 2, 3]


// 2.使用concat
let arr = [1, 2, 3]
let arr2 = arr.concat()  // [1, 2, 3]

arr[0] = 4  // arr: [4, 2, 3]

arr2 // 仍然为[1, 2, 3]

数组单词计数
blog.csdn.net/u013778905/…

Object

Javascript的Object跟Python的dict差不多。

常规操作

// 判断元素是否存在
let obj = {'aa': 1, 'bb': 2}

'aa' in obj // true

obj.hasOwnProperty('aa') // true


// 删除key
delete obj.aa


// 获取Object的所有key值
let obj = {'aa': 1, 'bb': 2}

Object.keys(obj) // ["aa", "bb"]

判断两个Object对象是否相等:目前本人所了解到的只能通过遍历判断,如果有更简洁的办法还望指出!

浅拷贝与深拷贝:浅拷贝直接赋值

// 1.new一个对象,把旧对象的值赋予新对象
let a = {name:'yy', age:26}
let b = new Object()

b.name=a.name
b.age=a.age

a.name='xx' 
console.log(b) //Object { name="yy", age=26}
console.log(a) //Object { name="xx", age=26}

// 2.JSON方法
var a = {age:1, name:'ccy', info: {address: 'wuhan', interest: 'playCards'}}
var b = JSON.parse(JSON.stringify(a))

a.info.address = 'shenzhen';

a.info  // {address: "shenzhen", interest: "playCards"}

b.info  // {address: "wuhan", interest: "playCards"}

其他类型

null 和 undefined
null 类似Python的None,表示一个空值,事实证明,null和undefined区别不大,undefined仅仅在判断函数参数是否传递的情况下有用。

Symbol:Symbol 是 ES6 引入了一种新的原始数据类型,表示独一无二的值。

For循环的四种形式

juejin.cn/post/684490…