JavaScript 语法基础(下)

简介: JavaScript 语法基础(下)

三、数组



1. 创建数组


方式一:new 一个对象


let arr = new Array();


方式二:字面量创建


let arr = [];
let arr2 = [1, 2, 'hello', true, undefined];


由于 JS 是动态类型的语言,所以不要求数组中的元素一定是相同类型的。


2. 数组的基本使用


let arr = [1, 2, 'hello', true];
console.log(arr);
console.log(arr.length);
let i = 0;
for(i=0; i<arr.length; i++) {
    console.log(arr[i]);
}
console.log(arr[100]);


展示结果:


9480cb94d5a94e77ad508ccf7966ac63.png


在 JS 中,若代码中涉及到超出数组范围或不在数组范围内,在浏览器显示的时候并不会报错,但会显示 【undefined】.


3. 为数组新增元素


let arr = [1, 2, 'hello', true];
arr[4] = 100;
console.log(arr.length);
arr[-1] = 200;
console.log(arr.length);
arr[10] = 300;
console.log(arr.length);
arr['hello'] = 'world';
console.log(arr.length);
console.log(arr['hello']);
console.log(arr.hello);
console.log(arr);


展示结果:


1c50022ae0b341f1b983757d3218f151.png


注意


① 当我们尝试对 arr 进行尾插的时候,结果成功。

② 当我们尝试往 arr[10] 插入元素的时候,结果成功,并且扩容了数组长度。

③ 当我们尝试往 arr[ ‘hello’ ] 插入元素的时候。即非数字下标,结果成功,但不计入长度。但是,这里我们应该将 “下标” 理解成数组的 “属性”,我们同时可以通过 arr.hello 的方式来访问此属性对应的值。

④ 当我们尝试往 arr[-1] 插入元素的时候,结果成功,但不计入长度。这和上面所说的 “属性” 是一个道理,但又不完全一致。


而造成这些与 Java 数组不同语法的关键,其实就是因为 JS 是一个动态类型的语言,所以才会衍生出这些不同的逻辑。


4. 为数组增删元素


为数组增删元素,推荐使用 push 和 splice 方法,方便且清晰。

在 JS 中,我们可以将数组理解为一个对象,那么我们就可以利用对象对应的方法,这就和 Java 中的 ArrayList 差不多,push 就相当于 ArrayList 的 add 方法。


而下面的 splice(2,3),表示:从数组 2下标开始,删除后三个元素。


let arr = [];
for(let i=0; i<10; i++) {
    arr.push(i);
}
console.log(arr.length);
console.log(arr);
arr.splice(2,3);
console.log(arr.length);
console.log(arr);


展示结果:


f4846c523cb34b3a90ca37ddf7f62ca2.png


四、函数



① 函数的定义和调用的先后顺序没有要求。

② 若函数有返回值,函数定义的时候不需要写返回类型。

③ 实参和形参之间的个数可以不匹配,但实际开发中,要求形参和实参个数要匹配。

④ 函数表达式:可以定义一个函数赋给一个变量,再通过变量来调用当前的函数。


展示1


函数的定义和调用的先后顺序没有要求。


f1();
console.log("-----------------");
function f1() {
    console.log("hello");
}
f1();
console.log("-----------------");
function f2(x, y) {
    return x + y;
}
console.log(f2(1, 2));
console.log(f2("hello ", "world"));;


展示结果:


596e97c3dc6f41de947ab359ca5efc54.png


展示2


实参和形参之间的个数可以不匹配。


function f1(x, y) {
    console.log("x:" + x);
    console.log("y:" + y);
    return x + y;
}
console.log(f1(10));
console.log("----------------------");
console.log(f1(10, 20, 100));


展示结果:


ec4ab4b9964c4bcab33215beac7652f7.png


展示3


function add(a, b, c, d) {
    //若 a 不为0,那么就将 a 的值赋值给 a ;否则,将 0 赋值给 a
    a = a || 0;     
    b = b || 0;
    c = c || 0;
    d = d || 0;
    return a + b + c + d;
}
console.log(add(10));
console.log(add(10 + 20));
console.log(add(10 + 20 + 30));
console.log(add(10 + 20 + 30 + 40));


展示结果:


df6d8456d25e4921bab48bcb461f268d.png


展示4


函数表达式:可以定义一个函数赋给一个变量,再通过变量来调用当前的函数。

函数和一个普通变量的地位相同,可以相互赋值。此外,还可以省略函数名,这是常见的匿名函数写法。


let add = function addFun(x, y) {
    return x + y;
}
console.log(add(10, 20));
//常见写法:匿名函数
let add2 = function (x, y) {
    return x + y;
}
console.log(add2(10, 20));


展示结果:


850b56c51ce34ae0b34816d9551cbb56.png


作用域


var 关键字的范围可以脱离大括号外,let 关键字的范围只能再大括号内。


for(var i=0; i<10; i++) {
}
console.log(i);
for(let i=0; i<10; i++) {
}
console.log(i);


展示结果:


c7749ae2c01547a88d18c05668af7e20.png


五、对象



在 JS 中,字符串、数值、数组、函数都是对象。


创建对象


1. 使用字面量创建对象 (最常用)


let student = {
    name: 'Jack',
    age: 20,
    height: 175,
    f1:function() {
        console.log('hello');
    } 
};
console.log(student.name);
console.log(student['age']);
student.f1();


展示结果:


6b0ab817ca2b42a8a9a70629151b1129.png


注意:

① 使用 【. 成员】 来访问运算符来访问属性;. 可以理解成 “的”。

② 使用 [ ] 访问属性,此时属性需要加上引号。

③ 调用方法需要加上 ( )


2. 使用 new Object 创建对象


//和创建数组类似
let student = new Object(); 
student.name = "Rose";
student.height = 175;


3. 使用构造函数创建对象


function robot(name, type) {
    this.name = name;
    this.type = type;
    this.func = function() {
        console.log("超级变换形态");
    } 
}
let robot1 = new robot("卡布达", "1号机器人");
let robot2 = new robot("金龟次郎", "2号机器人");
let robot3 = new robot("飞翔机器人", "3号机器人");


这种创建对象的方式类似于 Java 中创建实例,但并不完全相似,此外,这种方式用的少。形如这样的函数被称为 “构造函数”,JS 中的构造函数是可以独立存在的,这一点与 Java 不同。


理解 JS 中的对象


① JS 没有 “多态”, JS 本身就是动态类型语言,在使用对象的某个方法时,本身也不需要对对象的类型做出明确区分,因此并不需要在语法层面上支持多态。


② JS 对象不区分 “属性” 和 “方法”。


③ JS 对象没有 private / public 等访问控制机制。


④ JS 对象没有 “继承”,继承本质就是 “让两个对象建立关联”,或者说,是让一个对象能够重用另一个对象的属性 / 方法,JS 中使用 “原型” 机制实现类似的效果。


⑤ 在 ES6 之前,JS 没有 “类” 的概念,对象其实就是 “属性” + “方法”。而类则相当于把一些具有共有的对象的属性和方法单独提取了出来,相当于一个模型一样,那么,通过这个模型就可以实例化对象了。在 JS 中的 “构造函数” 也能起到类似的效果,但并不完全具备类的一些特性。在 ES6 之后,也引入了 class 关键字,就能按照类似于 Java 的方式创建类和对象了,但用 class 的方式还是较少。


目录
相关文章
|
4月前
|
存储 JavaScript 前端开发
Node.js的基本语法
【8月更文挑战第12天】Node.js的基本语法
145 1
|
2月前
|
JavaScript 前端开发
JavaScript 函数语法
JavaScript 函数是使用 `function` 关键词定义的代码块,可在调用时执行特定任务。函数可以无参或带参,参数用于传递值并在函数内部使用。函数调用可在事件触发时进行,如用户点击按钮。JavaScript 对大小写敏感,函数名和关键词必须严格匹配。示例中展示了如何通过不同参数调用函数以生成不同的输出。
|
2月前
|
JavaScript 前端开发 大数据
在JavaScript中,Object.assign()方法或展开语法(...)来合并对象,Object.freeze()方法来冻结对象,防止对象被修改
在JavaScript中,Object.assign()方法或展开语法(...)来合并对象,Object.freeze()方法来冻结对象,防止对象被修改
31 0
|
4月前
|
JavaScript 前端开发
JavaScript基础&实战(1)js的基本语法、标识符、数据类型
这篇文章是JavaScript基础与实战教程的第一部分,涵盖了JavaScript的基本语法、标识符、数据类型以及如何进行强制类型转换,通过代码示例介绍了JS的输出语句、编写位置和数据类型转换方法。
JavaScript基础&实战(1)js的基本语法、标识符、数据类型
|
4月前
|
前端开发 JavaScript 程序员
前端 JavaScript 的 _ 语法是个什么鬼?
前端 JavaScript 的 _ 语法是个什么鬼?
|
5月前
|
缓存 JavaScript 前端开发
前端框架与库 - Vue.js基础:模板语法、数据绑定
【7月更文挑战第14天】Vue.js 是渐进式框架,以简洁API和高效数据绑定知名。本文聚焦模板语法与数据绑定,解释常见问题和易错点,助力初学者避坑。模板语法中,{{ expression }} 用于渲染值,v-bind/: 用于动态绑定属性。数据绑定涉及文本、属性和事件,注意v-model适用于表单元素,计算属性有缓存。理解正确用法,借助文档和IDE,可提升开发质量和效率。善用Vue.js,打造响应式UI。
159 4
|
6月前
|
存储 JavaScript 前端开发
JavaScript 语法
JavaScript 语法
38 5
|
5月前
|
存储 JavaScript 前端开发
|
6月前
|
JavaScript 前端开发
JavaScript语法关键点:变量用`var`、`let`、`const`声明
【6月更文挑战第22天】JavaScript语法关键点:变量用`var`、`let`、`const`声明;七种数据类型包括`Number`、`String`、`Boolean`、`Null`、`Undefined`、`Symbol`和`Object`;运算符如算术、比较、逻辑和赋值;流程控制有`if...else`、`switch`和各种循环。了解这些是JS编程的基础。
62 3
|
5月前
|
前端开发 JavaScript
js【详解】Promise(含 Promise 的三种状态及其变化,创建 Promise, Promise.all 语法、Promise.all 实战范例、手写 Promise.all)
js【详解】Promise(含 Promise 的三种状态及其变化,创建 Promise, Promise.all 语法、Promise.all 实战范例、手写 Promise.all)
663 0