一、变量
JS定义变量var(variable)的语法如下:
var 变量名;
给变量赋值(变量初始化 )的过程:
var 变量名 = 变量值;
var
的关键字后面跟的是变量名,变量名的命名也有规定:
-
只能是字母下划线或$开头;
-
变量中间可以是数字,但是不能是学术符号
-
变量的命名应该遵守驼峰命令规范
-
变量的命名应该遵守见名知义
二、数据类型
ES里面的数据类型分为2大类:基本数据类型、复杂数据类型。
1.基本的数据类型
(1)字符串string
所有加了引号的都是字符串,无论是''单引号还是""双引号,使用string
表示
var a = "who";
var b = 'cba';
(2)数字number
在JS里面,没有整数,小数,浮点数,单精度,双精度等区别,所有的数都是数字,使用number
表示
var a = 8;
(3)布尔boolean
JavaScript中的布尔类型(Boolean) 只有两个值:true和false,它用于表示真或假的存储 。布尔类型在条件判断、逻辑运算和比较运算等场景中经常使用。在JavaScript中,可以通过以下方式定义布尔类型变量:
var flag = true; // 定义布尔类型变量并初始化为truevar result = false; // 定义布尔类型变量并初始化为false
(4)空null
null类型是空类型的意思,它里面只有一个值就是null
var a = null;
(5)未定义类型undefined
undefined是一个未定义类型,这个类型里面只有一个值就是undefined
var a = 123; //后面跟了一个数字,所以是数字类型
var b = "hello"; //后面跟了一个字符串,所以它是字符串类型
var c = true; //后面跟了一个boolean值,所以是布尔类型
var d = null; //后面跟了一个null值,所以是null类型//后面跟什么类型的值,变量就是什么数据类型
var d ; //这个时候d没有赋值(没有定义值),所以d就是未定义类型,它就是undefined
为什么需要未定义类型,什么情况下需要未定义类型?
JS是一个弱类型语言,它的数据类型是可以发生变化的,并且它义义所有的变量都是通过var
来进行,然后它的数据类型是由后面的值来决定的。
null
和undefined
在JavaScript中都被用来表示“空”或“无”的概念,它们有什么区别呢?
1.来源和定义
null
是一个表示空值的关键字,它的值表示一个空对象指针。在JavaScript中,null
是一个特殊的值,它的类型是object
,尽管它实际上并不指向任何对象。undefined
是一个表示未定义值的全局属性。当变量被声明但未赋值时,它的默认值就是undefined
。此外,在函数中没有返回值时,函数的返回值也是undefined
。
2.比较
- 在非严格模式下,
null
和undefined
是相等的,即null == undefined
的结果是true
。但在严格模式下,它们是不相等的,即null === undefined
的结果是false
。
3.用途
null
通常用于表示一个变量被有意地设置为空,或者表示一个对象不存在。例如,当你想要表示一个变量当前没有值时,你可以将其赋值为null
。undefined
通常用于表示一个变量未被初始化,或者表示一个属性或方法不存在。例如,当你访问一个未声明的变量或一个不存在的对象属性时,JavaScript会返回undefined
。
4.类型转换
- 当将
null
转换为数字时,结果是0
。例如,Number(null)
的结果是0
。 - 当将
undefined
转换为数字时,结果是NaN
。例如,Number(undefined)
的结果是NaN
。
5.语义
null
表示“没有对象”,即该处不应该有值。undefined
表示“缺少值”,即此处应该有一个值,但是还没有定义。
总结:null
和undefined
都表示空值,但它们的来源、定义和用途不同。null
表示一个变量被有意地设置为空,而undefined
表示一个变量未被初始化或属性不存在。在比较时,它们在严格模式下不相等,而在非严格模式下相等。在类型转换中,null
转换为数字是0
,undefined
转换为数字是NaN
。
三、关键字与保留字
什么是关键字?什么是保留字?
关键字是系统当中存在的一些特殊单词或字符,用于完成系统的一个或多个功能。保留字也是系统的关键字。
关键词:
break case catch continue default delete do else finally for function ifwith in instanceof new return switch this throw try typeof var void while
保留字
abstract boolean byte char class const debugger double enum export extends final transient protected public short static super synchronized throws volatile float goto implements import int interface long native package private
四、数据类型检测
因为JS是弱类型语言,它的变量的数据类型是可以随时发生变化的,如果想知道某一个变量的数据类型可以使用typeof
var a = 123; //number类型
console.log(typeof a); //"number"a = "hello"; //string类型
console.log(typeof a); //"string"a = true; //boolean类型
console.log(typeof a); //"boolean"var d = null; //null类型
console.log(typeof d); //"object"var e = undefined; //undefined类型
console.log(typeof e); //"undefined"
五、数据类型转换
JS的基本数据类型有5种,它们之间也可以存在转换关系。
1.其它类型转字符串
字符串类型是所有编程语言里面最安全的数据类型。因为所有的数据类型都可以转换成字符串类型。
(1)String()函数
通过String()函数完成转换,String()函数是通用方式,也是系统隐式类型转换的方式,它的语法格式如下:
String(object:any):string;
any——任何类型
:string——返回值类型为字符串
var a = 123;
var b = true;
var c = null;
var d = undefined;var aa = String(a); //"123"
var bb= String(b); //"true"
var cc = String(c); //"null"
var dd = String(d); //"undefinied"
(2)toString()函数
通过toString()函数完成转换,toString()函数只能在非空的数据上面使用,语法格式如下:
arrayObject.toString()arrayObject ——的字符串表示。
返回值——与没有参数的 join() 方法返回的字符串相同。
var a = 123;
var aa = a.toString(); //"123"// var cc = c.toString(); //报错
(3)加上一个空字符串
这一种方式的本质其实就是调用了String()
方法。
var a = 123;
var b = true;
var c = null;
var d = undefined;var aa =a + ""; //"123"
var bb = b + ""; //"true
var cc = c + ""; //"null"
var dd = d + ""; //"undefined"
2.其它类型转数字
var a = "123";
var b = "abc";
var c = "3.14";
var d = "3a";
var e = "a3";
var f = true;
var g = false;
var h = null;
var i = undefined;
var j = "";
var k = "3.6";
(1)Number()函数
通过Number() 函数完成转换,Number() 函数把对象的值转换为数字。语法格式如下:
Number(object:any):number;
any——任何类型
:number;——如果参数是 Date 对象,Number() 返回从 1970 年 1 月 1 日至今的毫秒数。
如果对象的值无法转换为数字,那么 Number() 函数返回 NaN。
var a1 = Number(a); //123
var b1 = Number(b); //NaN
var c1 = Number(c); //3.14
var d1 = Number(d); //NaN
var e1 = Number(e); //NaN
var f1 = Number(f); //1
var g1 = Number(g); //0
var h1 = Number(h); //0
var i1 = Number(i); //NaN
var j1 = Number(j); //0
var k1 = parseInt(k); //3
(2)parseInt()函数
通过parseInt() 函数完成转换,parseInt() 函数可解析一个字符串,是逐个字符转换,转换成功就保留,转换失败就停止 ,并返回一个整数。语法格式如下:
parseInt(s: string, radix?: number): number
string——必须填,要解析的字符串。
radix——可选。表示要解析的数字的基数。该值介于 2 ~ 36 之间。如果省略该参数或其值为 0,则数字将以 10 为基础来解析。如果它以 “0x” 或 “0X” 开头,将以 16 为基数。如果该参数小于 2 或者大于 36,则 parseInt() 将返回 NaN。
: number——为返回的数据类型,只有字符串中的第一个数字会被返回。
var a1 = parseInt(a); //123
var b1 = parseInt(b); //NaN
var c1 = parseInt(c); //3
var d1 = parseInt(d); //3
var e1 = parseInt(e); //NaN
var f1 = parseInt(f); //NaN //将布尔类型的true隐匿类型转换为字符串的"true",再调用parseInt
var g1 = parseInt(g); //NaN
var h1 = parseInt(h); //NaN
var i1 = parseInt(i); //NaN
var j1 = parseInt(j); //NaN
(3)parseFloat()函数
通过parseFloat() 函数完成转换,parseFloat() 函数可解析一个字符串,并返回一个浮点数。语法格式如下:
parseFloat(s:string):number;
string——必须填,要解析的字符串。
: number——为返回的数据类型,只有字符串中的第一个数字会被返回。
var a1 = parseFloat(a); //123
var b1 = parseFloat(b); //NaN
var c1 = parseFloat(c); //3.14
var d1 = parseFloat(d); //3
var e1 = parseFloat(e); //NaN
var f1 = parseFloat(f); //NaN
var g1 = parseFloat(g); //NaN
var h1 = parseFloat(h); //NaN
var i1 = parseFloat(i); //NaN
var j1 = parseFloat(j); //NaN
var k1 = parseFloat(k); //3.6
3.其它类型转布尔
注释:如果逻辑对象无初始值或者其值为 0、-0、null、""、false、undefined 或者 NaN,那么对象的值为 false。否则,其值为 true(即使当自变量为字符串 "false" 时)!
//下面的所有的代码行均会创建初始值为 false 的 Boolean 对象。
var anew Boolean()
var b=new Boolean(0)
var c=new Boolean(null)
var d=new Boolean("")
var e=new Boolean(false)
var f=new Boolean(NaN)
//下面的所有的代码行均会创初始值为 true 的 Boolean 对象:
var a=new Boolean(true)
var b=new Boolean("true")
var c=new Boolean("false")
var d=new Boolean("Richard")
始终记得,在JS里面,只有6个明确的false值,其它的全为true。
六、进制转换
parseInt() 函数、toString()函数可进制转换
示例:
//其它进制转十进制parseInt(s:string,radix?:number):number;
//十进制转其它进制number.toString(radix);//number:需要转换的十进制数字2。//radix:目标进制,范围是2到364。console.log(parseInt("10", 16)); // 输出:16(十六进制转十进制)var num = 1233;console.log(num.toString(2));// 输出:"1111011"(十进制转二进制)console.log(num.toString(16));// 输出:"7b"(十进制转十六进制)// 将二进制转换为十进制console.log(parseInt("110", 2));
// 输出:65// 将十进制转换为二进制var num = 1233;console.log(num.toString(2)); // 输出:"1111011"5// 将十六进制转换为十进制1console.log(parseInt("1A", 16));// 输出:265// 将十进制转换为十六进制1console.log(num.toString(16));
// 输出:"7b"// 将八进制转换为十进制console.log(parseInt("10", 8));
/ 输出:85// 将十进制转换为八进制1console.log(num.toString(8));// 输出:"123"// 将32进制转换为十进制(JavaScript不支持32进制,但可以转换2到36之间的任意进制)4console.log(parseInt("100000", 32));
// 输出:4096