Skip to content

Javascript的语法和数据类型

1.注释

//单行注释
/*
多行注释
*/

2.声明

Javascript的三种声明方式

  • var 声明一个变量,可赋一个初始值
  • let 声明一个块作用域的局部变量,可赋一个初始值
  • const 声明一个块作用域的只读命名的常量
 let var 当没有赋初始值时,默认会添加undefined
 而 const a 会出现无效的引用Uncaught SyntaxError
 let a //undefined
 var a //undefined
 const a //Uncaught SyntaxError
 
 //检测undefined 和 null
 Number()方法去验证 undefined 返回NAN null返回0

2.1全局和局部的概念

  • 全局变量:即声明在函数之外,当前文档所有地方都可以访问;
  • 局部遍历:即声明在函数内部,仅在当前函数内可以访问;

ES6之前,并没有块级作用域概念且只能用var声明变量

if(true) {
    var a = 1
}
console.log(a) 1
if(true) {
    let a = 1
}
console.log(a) //Uncaught SyntaxError

2.2变量提升函数提升的概念

ES6之前存在变量提升的概念

console.log(b) //undefined
var b = 1
console.log(b) //1

console.log(b) //Uncaught SyntaxError
let b =1
console.log(b) 1

//函数声明和函数表达式声明
getA() //正常
function getA() {}


getA() //Uncaught SyntaxError
var g = function() {}

2.3全局变量

  • ES5中顶层对象的属性等价于全局变量(浏览器window,Node中式global)
  • ES6 var function 声明依旧为顶层对象的属性,但是let/const/class 声明的全局变量不属于顶层对象,ES6中全局变量和顶层对象的属性是分开的。
//ES5
var a = 'aaa'
window.a // aaa

//ES6 
let b = 'aaa'
window.b //undefined

2.4.常量

ES6之后我们可以使用const来声明一个只读常量,并且在声明时必须赋值,之后在相同的作用域不能赋值也不能重新声明否则会报错。

const a //Uncaught SyntaxError
const b ='aaa'
b = 'ccc' //Uncaught TypeError

尽管const不能修改值,但是对于对象和数组却能修改属性

const a = {name:'lee',age: 20}
a.age = 30
console.log(a) // {name: 'lee',age: 30}

3.数据结构和数据类型

JavaScript总共有7种的数据类型

  • 6种原型数据类型
    • 1.Boolean
    • 2.null
    • 3.undefined
    • 4.Number
    • 5.String
    • 6.Symbol (ES6唯一且不可变的数据)
  • Object对象类型
    • 1.Obejct

3.1.数据类型转换

let a ='1'
let b = 2
a+b //12

转换小技巧
+a++b //3

4.字面量

字面量是用来表示如何表达这个值,简单理解就是变量赋值时右边的都是字面量。

  • 1.数组字面量
  • 2.布尔字面量
  • 3.浮点数字面量
  • 4.整数字面量
  • 5.对象字面量
  • 6.正则字面量
  • 7.字符串字面量
let a= 1 //右边都是字面量
let a= [1,,3]
//使用,会默认赋值为undefined并且会计算长度

5.检测数据类型可靠函数

export function(params) {
     let res =  Object.prototype.toString.call(params);
     return res;
    <!-- toString.call('foo');     // "[object String]"
    toString.call([1, 2]);    // "[object Array]"
    toString.call(3);         // "[object Number]"
    toString.call(true);      // "[object Boolean]"
    toString.call(undefined); // "[object Undefined]"
    toString.call(null);      // "[object Null]" -->
}