js基础

js基础语法


常量和变量

标识符: 标识符必须是字母, 下划线, 美元符号$和数字, 但必须是字母, 下划线,美元符号开头,依然是不能数字开头就行.标识符区分大小写.

声明

1
2
3
4
5
6
7
8
9
var声明一个变量

let声明一个块作用域中的局部变量

const声明一个常量

js中的变量声明和初始化时可以分开的.

var会把变量提升到全局或函数作用域,如果明确知道一个标识符定义后不再修改,应该声明成const常量,减少被修改的风险,减少bug.

数据类型

序号 名称 说明
1 number 数值型,包括整型和浮点型
2 boolean 布尔型,true和false
3 string 字符串
4 null 只有一个值null
5 undefined 变量声明未赋值的;对象未定义的属性
6 symbol ES6新引入类型
7 object 是以上基本类型的复合类型,是容器

弱类型,不需要强制类型转换, 会隐式类型转换.

NaN,即Not a Number,转换数字失败, 它和任何值都不等,和自己也不等, 只能使用Number.isNaN

总结:

1
2
3
4
5
6
7
遇到字符串, 加号就是拼接字符串,所有非字符串隐式转换为字符串.

如果没有字符串, 加号把其他所有类型都当做数字处理, 非数字类型隐式转换为数字, undefined特殊, 因为它都没有定义值, 所以转换数字失败得到一个特殊值NaN.

如果运算符是逻辑运算符, 短路符, 返回就是短路时的类型, 没有隐式转换.

除非你十分明确, 否则不要依赖隐式转换. 写代码的时候, 往往为了程序的健壮,请隐式转换.

三元运算符

条件表达式?真值:假值

等价于简单的if…else结构

函数, 匿名函数,函数表达式的差异

函数和匿名函数, 本质上都是一样的, 都是函数对象, 只不过函数由自己的标识符—函数名, 匿名函数u需要借助其他的标识符而已.

区别在于, 函数会声明提升, 函数表达式不会 .

高阶函数: 函数作为参数或返回 一个函数.

函数

1
2
3
4
5
6
7
8
function 函数名(参数列表){
函数体;
return 返回值;
}
function add(x, y){
return x + y;
}
console.log(add(3, 5));

函数, 匿名函数, 函数表达式的差异

函数和匿名函数, 本质上都是一样的, 都是函数对象, 只不过函数有自己的标识符 – 函数名, 匿名函数需要借助其他的标识符而已.

区别在于, 函数会申明提升, 函数表达式不会.

1
2
3
4
5
6
7
8
9
console.log(add(4, 6));
// 匿名函数
function add(x, y){
return x + y;
}
const sub = function (x, y){
return x -y;
}
console.log(sub(5, 6));

高阶函数

高阶函数: 函数作为参数或返回一个函数

箭头函数

箭头函数就是匿名函数,它是一种更加精简的格式.

箭头函数参数

  • 如果一个函数没有参数,使用()

  • 如果只有一个参数,参数列表可以省略小括号()

  • 多个参数不能省略小括号,且使用逗号间隔.

箭头函数返回值.

如果函数体部分有多行,就需要使用{}, 如果有返回值使用return.

如果只有一行语句, 可以同时省略大括号和return.

只有return语句, 就不能省略大括号,

如果只有一条非return语句, 加上大括号, 函数就成了无返回值,

函数参数

普通参数

一个参数占一个位置,支持默认参数.

可变参数(rest parameters剩余参数)

js使用…表示可变参数(python用*手机多个参数)

1
2
3
4
5
6
7
8
const sum = function (...args){
let result = 0;
for (let x in args){
result += args[x]
}
return result
};
console.log(sum(3, 6, 9))

arguments对象

函数的所有参数会被保存在一个arguments的键值对对象中.

参数解构

和python类似, js提供了参数解构, 依然使用了…符号来结构.

1
2
3
4
const add = (x, y) =>{console.log(x, y); return x + y};
console.log(add(...[100, 200]))
console.log(add(...[100, 200, 300]))
console.log(add(...[100]))

函数返回值

python中可以使用return 1, 2 返回多值, 本质也是一个值, 就是一个元组.

表达式的值

类c的语言,都有一个概念 – 表达式的值

赋值表达式的值: 等号右边的值

逗号表达式的值:类c语言, 都支持逗号表达式, 逗号表达式的值, 就是最后一个表达式的值.

异常

抛出异常

js的异常语法和java相同, 使用throw关键字抛出.

使用throw关键字可以抛出任意对象的异常.

1
2
3
4
throw new Error('new error');
throw new ReferenceError('Ref Error');
throw 1;
throw 'not ok';

捕获异常

try…catch语句捕获异常

try …catch…finally 语句捕获异常, finally保证最终一定执行.

问题: null和undefined的异同

1.undefined:是所有没有赋值变量的默认值,自动赋值。

2.null:主动释放一个变量引用的对象,表示一个变量不再指向任何对象地址。

当使用完一个比较大的对象时,需要对其进行释放内存时,设置为 null。

共同点:都是原始类型,保存在栈中变量本地。

不同点:

undefined——表示变量声明过但并未赋过值。

它是所有未赋值变量默认值,例如:

1
var a;    // a 自动被赋值为 undefined

null——表示一个变量将来可能指向一个对象。

一般用于主动释放指向对象的引用,例如:

1
2
var emps = ['ss','nn'];
emps = null; // 释放指向数组的引用

它是专门释放对象内存的一个程序。

  • 在底层,后台伴随当前程序同时运行;引擎会定时自动调用垃圾回收期;
  • 总有一个对象不再被任何变量引用时,才释放
感谢支持 !
0%