JavaScript(ES5)
JavaScript的基本语法和变量
变量声明与变量赋值的方法:
var a = 5;
var a = 5;var b = 4;
var a = 3, b = 2;
var a,b,c = 5;
var a = b = c = 1;
变量的命名规范
- 首字符:英文和下划线
- 组成:英文数字下划线
- 禁忌:关键字、保留字
引用数据类型和基本数据类型区别:
基本数据类型 | 引用数据类型 | |
---|---|---|
存储位置 | 是不可变的,直接存储在内存中的**栈(stack)**上 | 是可变的,它们存储在内存中的**堆(heap)**上,而变量存储的是对象的引用(地址)在栈上。 |
传递方式 | 基本类型的值是按值传递的 | 引用类型的值是按引用传递的。 |
内存占用 | 基本类型的值通常占用较少的内存 | 引用类型的值通常占用更多的内存 |
JavaScript 是一种动态类型语言,它支持多种数据类型。以下是 JavaScript 中的一些基本数据类型:
-
Undefined(未定义):
变量被声明了,但没有被赋值时,其值就是 undefined 。-
未赋值的变量: 如果一个变量被声明了但没有被赋值,那么它的值就是
undefined
。let myVar; console.log(myVar); // 输出: undefined
-
函数没有返回值: 如果一个函数没有明确的返回语句,或者没有被调用
return
语句,那么它会默认返回undefined
。function myFunction() { // 没有返回语句 } console.log(myFunction()); // 输出: undefined
-
对象属性不存在: 尝试访问对象上不存在的属性会得到
undefined
。let obj = { name: "Kimi" }; console.log(obj.age); // 输出: undefined
-
函数参数未传值: 如果调用函数时没有传入足够的参数,那么未传入的参数的值将是
undefined
。function greet(name) { console.log(name); } greet(); // 输出: undefined
-
undefined
的类型:undefined
是一个原始类型,它有自己的类型undefined
。typeof undefined; // 输出: "undefined"
与 null 的区别: undefined 和 null 都是表示“没有值”的特殊值,但它们是不同的。
undefined
表示变量声明了但还没有值,而null
表示有意赋予变量一个“没有值”的值。检查 undefined: 通常使用
typeof
操作符来检查一个变量是否为 undefined。undefined 的不可变性: undefined是不可变的,这意味着你不能给 undefined赋值。
-
-
Null(空值):
表示一个空值,代表没有值。- 在对象属性中的使用:
- 当你想要删除对象的某个属性时,可以将该属性设置为
null
。(解除引用) - 当你想要检查一个对象的属性是否被设置为
null
时,可以使用if (object.property === null)
。
- 当你想要删除对象的某个属性时,可以将该属性设置为
- 在数组中的使用:
- 当你想要从数组中移除某个元素时,可以将该元素设置为
null
,但这并不会改变数组的长度。
- 当你想要从数组中移除某个元素时,可以将该元素设置为
- 在函数中的使用:
- 当函数没有返回值时,默认返回
undefined
,而不是null
。但是,你可以在函数中明确返回null
。
- 当函数没有返回值时,默认返回
- 在对象属性中的使用:
-
Boolean(布尔值):
只有两个值: true 和 false 。
以下值在转换为Boolean
时被视为false
:undefined
null
0
,-0
,0n
(BigInt类型的0)NaN
''
(空字符串)false
- 所有其他值都被视为
true
。
Boolean(undefined); // false Boolean(null); // false Boolean(0); // false Boolean(''); // false Boolean('Hello'); // true Boolean({}); // true Boolean(null == undefined) //true
-
Number(数字):
表示整数或浮点数。
-
转换函数:
JavaScript提供了parseInt
和parseFloat
函数来将字符串转换为数字,并且可以指定进制。parseInt(string, radix)
:将字符串转换为整数。radix
参数是基数,如果省略,默认为10。如果字符串以0x
或0X
开头,radix
会被设置为16。parseFloat(string)
:将字符串转换为浮点数。这个函数不使用radix
参数。num.toString([radix])
:将数转换成对应的进制的值。
let decimalFromHex = parseInt('1A', 16); // 26 let decimalFromOctal = parseInt('15', 8); // 13 let decimalFromBinary = parseInt('101', 2); // 5 let float = parseFloat('3.14'); // 3.14 let decimalNumber = 15; // 转换为二进制字符串 let binaryString = decimalNumber.toString(2); console.log(binaryString); // 输出: "1111"
-
BigInt(大整数):
表示大于 2^53 - 1 的整数。 -
String(字符串):
表示文本数据,可以是字母、数字、下划线、特殊字符等的序列。
转义序列:
\r :回车符 | \0 :空字符(null character) |
\t :制表符(水平) | \' :单引号 |
\b :退格符 | \" :双引号 |
\f :换页符 | \\ :反斜杠 |
\v :垂直制表符 | \n :换行符 |
\uXXXX :Unicode字符,其中XXXX 是四位十六进制数 | \xXX :ASCII字符,其中XX 是两位十六进制数 |
-
Symbol(符号)(ES6 新增):
一种唯一的、不可变的数据类型,常用作对象属性的键。 -
Object(对象):
由键值对组成,键是字符串,值可以是任意类型。
对象的创建: 1. 见面量 2.构造器方法
var dog = new Object(); dog.hair = "red"; dog.leg = "short"; dog.eye = "blue"; console.log(dog); var cat = { "name":"mimi", "age":12, "sex":"女" }; console.log(cat); console.log(cat.name);
//构造函数方法 function Person(firstName, lastName, age) { this.firstName = firstName; this.lastName = lastName; this.age = age; this.greet = function() { console.log("Hello, " + this.firstName + " " + this.lastName); }; } let person = new Person("John", "Doe", 30);
面试题
let a = {}; let b = {key:"b"}; let c = {key:"c"}; a[b] = 123; a[c] = 345; console.log(a); // {[object Object]: 345} console.log(a[b],a[b] === a[c]); // 345 true
-
Array(数组):
一种特殊的对象,用于存储有序的值序列。
示例: let numbers = [1, 2, 3, 4, 5]; -
Function(函数):
在 JavaScript 中,函数也是对象,因此它们可以像任何其他对象一样被操作。
JS 运算符
隐式转换的规则:
如果一个操作数是布尔值,那么在比较相等性之前 会将其转换成Number类型 true == 1
如果一个操作数是字符串 另一个操作数是 数值,比较时字符串会转换成数值 ,如果是一个不合法的数值 结果就是NaN ,比较式如果一个操作数是NaN,会无视规则,直接返回false
null == null 无视规则 直接返回 true
undefined == undefined 无视规则 直接返回 true
null== undefined 无视规则 直接返回 true
NaN== NaN无视规则 直接返回 false
如果一个操作数是对象另一个操作数不是对象就会调用对象的tostring方法用得到的基本值按照之前的规则去进行比较
如果两个操作数都是对象则去比较他们是否是同一个对象 也就是引用地址是否是相同的 如果不是相同的那么就会返回false 反之就是 true
对象和空数组的toString方法:
console.log({}.toString()); //[object Object]
console.log([].toString()); //
console.log([] == 0); //true Number([].toString()) == 0
console.log(![] == 0); //true Number(!Boolean([])) == 0
console.log([] == ![]); //true Number([].toString()) == Number(!Boolean([]))
console.log([] == []); //false 引用类型,比较的是引用地址
console.log({} == !{}); //false NaN = Number({}.toString()) == !Boolean({})
console.log({} == {}); //false
- 算术运算符
+
:加法。例如,5 + 3
结果为8
。-
:减法。例如,5 - 3
结果为2
。*
:乘法。例如,5 * 3
结果为15
。/
:除法。例如,5 / 3
结果为1.666...
。%
:取模(求余数)。例如,5 % 3
结果为2
。**
:指数(ES6 新增)。例如,2 ** 3
结果为8
。
- 赋值运算符
=
:赋值。例如,let a = 5;
。+=
:加法赋值。例如,a += 3
等同于a = a + 3
。-=
:减法赋值。*=
:乘法赋值。/=
:除法赋值。%=
:取模赋值。**=
:指数赋值(ES6 新增)。
- 比较运算符
==
:等于。比较两个值是否相等,类型可以不同。===
:严格等于。比较两个值是否相等,且类型也必须相同。!=
:不等于。!==
:严格不等于。>
:大于。<
:小于。>=
:大于等于。<=
:小于等于。
- 逻辑运算符
&&
:逻辑与。两个操作数都为真时,结果为真。||
:逻辑或。两个操作数中至少有一个为真时,结果为真。!
:逻辑非。反转操作数的布尔值。
- 位运算符(操作的二进制)
&
:按位与。|
:按位或。^
:按位异或。异为1,同为0~
:按位非。<<
:左移。乘2n>>
:右移(有符号)。除2n>>>
:右移(无符号)。
- 字符串运算符
+
:字符串连接。例如,'Hello, ' + 'world!'
结果为'Hello, world!'
。
- 其他运算符(一元运算符)
++
、--
typeof
:返回操作数的类型。例如,typeof 5
结果为'number'
。instanceof
:检查一个操作数是否是另一个操作数的实例。例如,new Date() instanceof Date
结果为true
。in
:检查一个属性是否存在于对象中。例如,'length' in 'Hello'
结果为true
。delete
:删除对象的属性或没用var声明的对象。例如,delete obj.propertyName
。void
:执行表达式但不返回任何值。例如,void 0
等同于undefined
。