JavaScript中数据类型与运算符
注释
和C、Java一样
- 单行注释
//
- 多行注释
/* 注释 */
,也可以用在语句中。
str = 'hello' + /* comment */ 'xdd'
console.log(str)
常量和变量
-
标识符:
- 标识符必须是字母、下划线、美元符号$和数字,但必须是字母、下划线、美元符号开头,依然是不能数字开头。
- 标识符区分大小写
-
变量的声明
- var 声明一个变量
var a = 1
。注意:var会做声明提升(即,可以先使用变量,后声明)(var会把变量提升到当前全局或函数作用域。)。 - let 声明一个快作用域中的局部变量
let a = 1
- const 声明一个常量
const name = '张三'
注意:常量必须声明时就赋值。(因为常量不可修改)- 如果明确知道一个标识符定义后不再修改,应该尽量声明成const常量,减少被修改的风险,减少Bug。
- 注意:,JS中的变量声明和初始化时可以分开的
var a; //只声明,a变量,a为undefined let b; console.log(1,a,b,typeof(a),typeof(b)) a = 1; b = "a string"; console.log(2,a,b,typeof(a),typeof(b)) a = "2345"; b = 2.45; console.log(3,a,b,typeof(a),typeof(b)) // const c //错误,不能这样写 const c = 100 // c = c + 1 #不行,const定义的是常量,会报错 console.log(4,c) // c = 200 //不可修改
- var 声明一个变量
-
let与var的区别
- let声明的变量是局部变量,不能突破任何作用域,即任何大括号
{}
所在的作用域。(注意:可以向内部渗透) - var声明的变量会做声明提升。即如果先使用,后使用var定义,不会报错。系统会自动做声明提升。
- var声明的变量,可以突破if和for等循环中的大括号{}作用域可以突破。但fun函数等其他的不能。(同样可以向内渗透)
console.log("- ".repeat(10),"if作用域","- ".repeat(10)) if(true){ let a = 10; var b = 20; aa = 30 //只要声明就是全局变量 } // console.log(a) //会出错,找不到变量名 console.log(b); // 20 console.log(aa); //30 console.log("- ".repeat(10),"{}作用域","- ".repeat(10)) { let c = 30; var d = 40; cc = 50; } // console.log(c) // 会出错,变量c不存在 console.log(d) // 40 console.log(cc) console.log("- ".repeat(10),"for作用域","- ".repeat(10)) for(let i=0;i<2;i++){ let f = 10 var g = 11 ff = 50 } // console.log(f) //会出错,变量f不存在 console.log(g) //11 console.log(ff) //50 console.log("- ".repeat(10),"fun函数中作用域","- ".repeat(10)) function xdd(){ let h = 10 var j = 12 hh = 100 //这种声明,会是全局变量,只要函数执行就可访问 } xdd() // console.log(h) //无法突破函数作用域 // console.log(j) //无法突破函数作用域 console.log(hh) //100
- let声明的变量是局部变量,不能突破任何作用域,即任何大括号
-
变量的声明规范
var y //只是声明,y值为undefined var x = 5 //规范的声明并初始化,声明全局或局部变量 z = 6 //不规范的初始化,不推荐。在严格模式下会产生异常。在赋值之前不能引用,因为它没有声明。一旦这样赋值就是全局作用域。
function hello() { var a //只是声明,a为undefined,作用域的函数中 a = 100 } console.log(a) //未声明变量a,异常
数据类型
序号 | 名称 | 说明 | 示例 |
---|---|---|---|
1 | number | 数值型,包括整形和浮点型 | let a = 10 |
2 | boolean | 布尔型,true和false | let a = true |
3 | string | 字符串 | let a = 'abc' |
4 | null | 只有一个值null | let a = null |
5 | undefined | 变量声明未赋值的;对象未定义的属性 | let a |
6 | symbol | ES6新引入类型 | |
7 | object类型 | 是以上基本类型的复合类型,是容器 | let = {a:1,b:2} |
不是基本数据类型 | Array | 数组,用于在单一引用中存储多个值的结构。 | let a = [1,2,3,'a','b'] |
- ES是动态语言,弱类型语言。
- 虽然先声明了变量,但是变量可以重新赋值任何类型。
// 类型转换
// 弱类型
console.log("=========string============")
console.log(a = 3 + "xdd",typeof(a)) //3xdd string
console.log(a = null + 'xdd',typeof(a)) //nullxdd string
console.