大家好,我是言淦,我今天带来的文章是《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 引入了一种新的原始数据类型,表示独一无二的值。