JavaScript基础语法。
一、标识符
硬性要求
1) 可以是由数字、字母、下划线和美元符号组成,不允许包含其他特殊符号。
2) 不能以数字开头。
3) 禁止使用JavaScript中的关键词和保留字来进行命名。
4) 严格区分大小写。
二、命名的方法
- 匈牙利命名法
其特点是标识符的名字以一个或者多个小写的字母开头,表示该变量的数据类型。
数据类型 |
对应前缀 |
Array数组 |
a |
Boolean布尔 |
b |
Float浮点 |
f |
Function |
fn |
Interger(int)整型 |
i |
Object对象 |
|
Regular Expression正则 |
re |
String字符串 |
s |
- 驼峰命名法
驼峰命名法分为两种,一种是大驼峰,另外一种为小驼峰。
1) 大驼峰又被称之为帕斯卡命名法,就是每个单词的首字母都是大写,
如:UserName
2) 小驼峰和大驼峰的区别在于,小驼峰第一个单词首字母为小写,第二个单词首字母为小写。
如:userName
- 蛇形命名法
其特点在于单词与单词之间使用下划线进行分隔。
如:user_name
三、关键字和保留字
关键字可用于表示控制语句的开始和结束或者用于执行特定操作,关键字是语言本身所保留的,不能用作标识符。
保留字还没有任何特定的用途,但在将来可能会被用作关键字。
JavaScript中的关键字与保留字有:
abstract、await、boolean、break、 byte、case、catch、char、 class. const、 continue、
finally、float、 for、 function、 goto、if、 implements、 import、 in、instanceof、 int、
interface、let、 long、 native、new、null、 package、private 、protected、 public、return、short、static、 super、 switch、 synchronized、 this、 throw、 throws、 transient、 true、 typeof、var、 volatile、 void、 while、 with、 yield 、try.
四、数据类型
数据类型分为两种:简单数据类型和复杂数据类型。
简单数据类型:
String、symbol、number、Boolean、underfined、null。
复杂数据类型:
Object
在JavaScript中,可以通过typeof查看数据类型。
Console.log(typeof 10);//number
Console.log(typeof true);//boolean
Console.log(typeof ‘hello’);//string
Console.log(typeof [1,2,3]);//object
五、声明变量
JavaScript中声明变量有三种:var,let,const。
Const和let的区别。
Const所声明的变量如果是简单数据类型,那么是不能在改变的。
Let所声明的变量无论是简单数据类型还是复杂类型,在后面都可以改变。
Var所声明的变量,允许重复声明;
重复声明不带有复制操作,js引擎会自动忽略后面的变量声明。
var test = 3;
var test;
console.log(test);//3
重新声明是如果有赋值操作,那么后面的数据会覆盖前一个数据。
var test = 3;
var test = 5;
console.log(test);//5
六、作用域
1、 全局作用域
在全局作用中所声明的变量称称为全局变量,全局变量在任何地方都可以被访问。
let a = 5;//这是一个全局变量。
2、 局部作用域
在js中,一对大括号就能产生一个局部作用域。局部作用域里的变量称为局部变量,只能在这个局部作用域中才能被访问。
{
let i = 10;
console.log(i);//10
}
console.log(i);//referenceError: I is not defined
在局部作用域里,如果变量名和全局作用域里的变量名冲突,优先使用局部作用域里的变量。
let i = 10;
{
let i = 100;
console.log(i);//100
}
console.log(i);//10
如果在局部作用域里声明变量没有书写关键字,会声明一个全局变量。
七、数据类型
1、 undefined类型
undefined类型就只有一个值,undefined。在使用变量但是没有为其赋值时,这个变量的值就是undefined。
注意:没有声明变量,使用时会报错,而不是undefined,但是打印时,显示的类型确实undefined。
let i;
console.log(typeof i);//undefined
console.log(typeof j);//undefined
console.log(i);//undefined
console.log(j); //ReferenceError: j is not defined
2、 null类型
null 类型的值只有一个,就是null,null表示一个空对象。从逻辑角度,null值表示一个空对象指针,用typeof操作符检测null的值会返回object。
let i = null;
console.log(typeof i);//object
undefined值是从null值派生而来,对这两个数据进行相等测试时返回true。
if(null == undefined){
console.log('Yes');//Yes
}
3、 布尔类型
布尔类型又被称为Boolean类型,就是真和假,这个类型的值只有两个,一个是true,另一个是false。
let i = true;
console.log(i);//true
console.log(typeof i);//boolean
注意:这两个值与数字值不一样,因此true不一定等于1,false也比一定等于0,Boolean类型值区分大小写,所以true、false和True、False不同。
虽然Boolean类型的值只有2个,但在ECMAScript中所有类型都可以转换为Boolean类型
console.log(Boolean("Hello"));//true
console.log(Boolean(42));//true
console.log(Boolean(0));//false
9个值对应布尔类型的假值:
1、 “”:双引号的空字符
2、‘’:单引号的空字符
3、 ``:空字符模板
4、0:数字0
5、-0:js中-0和0为不同值
6、NaN
7、false
8、null
9、undefined
4、 数字类型
数字类型又被称作number类型,其值分为整数和实数。
1、 整数
let a = 12;
let b = -7;
注意:二进制以0b开头,八进制以0开头,十六进制以0x开头
//二进制
let a = 0b101;//5
// 八进制
let b = 017;//15
//十进制
let c = 21;//21
// 十六进制
let d = 0xFD;//253
console.log(a,b,c,d);
2、 实数
实数就是常见的小数或者称为浮点数
表示浮点数方式的有两种:小数型和科学记数法型。
let a = 3.14;
let b = 9.12e+2;
console.log(a,b);//3.14 912
5、 NaN
NaN:Not a Number,非数值。特点任何涉及NaN的操作都会返回NaN。
let a = NaN + 10;
console.log(a);//NaN
NaN和任何值都不相等,包括自己本身。
console.log(NaN === NaN);//false
isNaN()函数,判断一个参数是否不是数值。
console.log(isNaN(NaN));//true
console.log(isNaN("123"));//false
console.log(isNaN(123));//false
console.log(isNaN("Hello"));//true
console.log(isNaN(true));//false
返回值为true则不是数值。返回false是数值。
NaN是属于number类型的。
console.log(typeof NaN);//number
6、 数值转换
1、 number():可以将非数值转换为数值,
使用number()函数时注意:
如果是Boolean值,true和flase将分别转换为1和0.
如果是数字,那么就是简单地传入和返回。
如果是null值,那么返回0;
如果是undefined,返回NaN。
console.log(Number(true));//1
console.log(Number(false));//0
console.log(Number(10));//10
console.log(Number(null));//0
console.log(Number(undefined));//NaN
如果是字符串只包含数字。将转换为十进制,即”1”变成1. “123”变成123,”011”变成11(注意这里不会被当做八进制来处理)
如果字符串中包含有效的十六进制格式,如”1.1”,则会被转换对应的浮点数值
如果字符串中包含有效的十六进制格式,如”0xf”,则会被转换同等大小的十进制整数。
如果字符串是空,则转换为0.
如果字符串包含上述格式之为的字符,则转换为NaN。
列如:
console.log(Number("1"));//1
console.log(Number("012"));//12
console.log(Number("0o10"));//8
console.log(Number("0b111"));//7
console.log(Number("3.14"));//3.14
console.log(Number("0xf"));//15
console.log(Number(""));//0
console.log(Number("123Hello"));//NaN
parseint():可以将非数值转换为数值,
parseint()更多看是否有数字,有就会将其转换为数值。
如number()函数转换”123hello”是会转换为NaN,而parseint()转换为123。
遇到空字符串时number()函数会将其转换为0,而parseint()转换为NaN
遇到小数时parseint()函数会取整。
console.log(parseInt("1"));//1
console.log(parseInt("012"));//12
console.log(Number("0o10"));//8
console.log(Number("0b111"));//7
console.log(parseInt("3.14"));//3
console.log(parseInt("0xf"));//15
console.log(parseInt(""));//NaN
console.log(parseInt("123Hello"));//123
parsefloat():可以将非数值转换为数值,
parsefloat():只解析十进制,所以没有第二参数,该函数会将小数点的字符串转换为小数,没有小数点的数转换为整数。同样的parsefloat()转换更多的数值,”123hello”会被转换为123.
console.log(parseFloat("21"));//21
console.log(parseFloat("123Hello"));//123
console.log(parseFloat("0xA"));//0
console.log(parseFloat("3.14"));//3.14
console.log(parseFloat("22.34.5"));//22.34
console.log(parseFloat("0908.34"));//908.34
console.log(parseFloat("3.1415e2"));//314.15
ES6将全局方法parseint()和parsefloat()等移植到number对象上。行为保持不变,目的逐步减少全局性的方法,使得语言逐步模块化。
//ES5写法
console.log(parseInt("12.34"));//12
console.log(parseFloat("12.34#"));//12.34
//ES6 写法
console.log(Number.parseInt("12.34"));//12
console.log(Number.parseFloat("12.34#"));//12.34
7、 字符串类型
字符串类型:可以用单引号,也可以用双引号。
注意:字符串的内容本身包含单引号或者双引号的话,需要和字符串界限符区分开
let a = "Hello 'World',welcome";// 正确
let b = 'Hello "World",welcome';// 正确
let c = "Hello "World",welcome";//正确
字符串数据类型很霸道,他和其他数据类型相加都会转换为字符串类型。
let a = "abcd";
let b = 13 + a;
let c = 3.14 + a;
let d = true + a;
let e = null + a;
let f = undefined + a;
console.log(typeof b);//string
console.log(typeof c);//string
console.log(typeof d);//string
console.log(typeof e);//string
console.log(typeof f);//string
tostring():该函数会将除了null和undelfined以外的数据类型转换为字符串
let a = 10,b = true,c = null,d;
console.log(typeof a.toString());//string
console.log(typeof b.toString());//string
console.log(typeof c.toString());// 报错
console.log(typeof d.toString());
null和undelfined不能通过tostring()函数转换为相应的字符串,tostring()函数在转换数值是可以带有参数,可以将数值指定转换为几进制。
let i = 10;
console.log(i.toString());//10
console.log(i.toString(2));//1010
console.log(i.toString(8));//12
console.log(i.toString(10));//10
console.log(i.toString(16));//a
string:可以将5种数据类型转换为字符串
let a = 10,b = true,c = null,d;
console.log(String(a),typeof String(a));//10 string
console.log(String(b),typeof String(b));//true string
console.log(String(c),typeof String(c));//null string
console.log(String(d),typeof String(d));//undefined string
字符串模板:用反引号(`)标识
let str = `Hello World`;
console.log(str);//Hello World
console.log(typeof str);//string
console.log(str.length);//11
使用模板字面量语法创建一个字符串,并赋值给message变量,这时变量与普通字符串一样。如果在字符串中包含反引号,只需用反斜杠转义。
ES6的模板字面量使用多行字符串更易创建,因为它不需要特殊的语法,只需在想要的位置换行,此处换行会同步在结果中。
let str = `Hello World`;
console.log(str);
//Hello
//World
console.log(typeof str);//string
console.log(str.length);//12
在反引号之内的所有空白符都是字符串的一部分,需留意缩进。
变量占位符由起始的${与结束的}来界定,之间允许放任意的js表达式。
let name = "xiejie";
console.log(`Hello,${name}`); //Hello,xiejie
占位符${name}会访问本地的变量name,并将其值插入message字符串中。Message变量会立即保留该占位符的结果。
占位符是js表达式,还可以嵌入运算符,函数调用等。
let count = 10,price = 0.25;
console.log(`${count} items cost $${(count*price).toFixed(2)}`);
//10 items cost $2.50