写在前面:

绝不废话!放心食用

JavaScript语法很简单,可以直接在控制台调试理解

1、变量和常量

/**
* var : 全局作用域,生命周期问题,容易冲突
* let :值可以被修改
* const :不可被修改
*/
let age = 30;
console.log(age);
age = 31;
console.log(age); const agge = 12;
console.log(agge);
// Error:const不能被修改
// agge = 15; // Error:必须初始化
// const agggge;

2、数据类型

/**
* Stirng
* Number
* Boolean
* null
* undefined
*/
// String
const username = "Dandelion";
const oldname = 'Dandelion_000'; // Number
const age = 30;
const score = 4.4; // Boolean
const flag = true; // null(非undefined,被定义为null)
const my_null = null; // undefined
let my_undefined;
const my_undefined_1 = undefined; console.log(typeof score);
console.log(typeof my_null); // null 输出 object
console.log(typeof my_undefined);

3、字符串

3.1 模板字符串

const username = "Dandelion";
const age = 20; // 连接
console.log("My name is " + username + " and I am " + age);
// 模板字符串
console.log(`My name is ${username} and I am ${age}`);

3.2 字符串的部分常用函数

const s = "Hello World!";

// length属性
console.log(s.length); // 全大写
console.log(s.toUpperCase());
// 全小写
console.log(s.toLowerCase()); // 获取子串,参数为起始和终止index,从0开始,左闭右开区间
console.log(s.substring(0, 4)); // 字符串分割,分割为字符数组,参数为字符串时以参数进行分割,为空串时,按字符分割
console.log(s.split(""));
console.log(s.split("r"));
console.log(s.split("Wo"));

4、数组

数组属于对象

const narr = new Array(1, 2, 3, 4, 5);
console.log(narr); const sarr = new Array("A", "b", "3", "DD", "E");
console.log(sarr); // 也可以使用这种方式定义,与构造函数相同
const barr = [true, false, false, true. null];
console.log(barr); // 数组各个元素元素类型可不相同
const arr = new Array(1, 2.2, "CC", false, null, undefined);
console.log(arr); console.log(arr[1]); // 可以使用索引访问元素
arr[2] = "CCC"; // 修改元素
// arr = []; // Error,数组对象本身为const,不能修改数组本身,只能修改元素 arr.push("push_back"); // 尾部追加
arr.unshift("un_shift"); // 头部插入
console.log(arr);
arr.pop(); // 尾部删除
console.log(arr); console.log(Array.isArray(arr)); // Array静态方法,判断是否是数组 // 获得元素索引,没有该元素时返回 -1
console.log(arr.indexOf("CCC"));
console.log(arr.indexOf("CC")); // 数组扩容
let bigArr = [1, 2, 3, 4];
console.log(bigArr);
bigArr[10] = 11; // 增加大小并赋值
console.log(bigArr); // 排序
let sortArr = [5, 2, 1, 6, 8];
sortArr.sort();
console.log(sortArr);

5、对象

const person = {
name: "Dandelion",
age: 20,
hobbies: ["music", "movies", "sports"],
address: {
street: "50 main st",
city:"Boston",
state:"MA",
},
}; console.log(person);
console.log(person.name);
console.log(person.hobbies[1]);
console.log(person.address.city); person.street = "52 main st" // 修改属性
person.email = "e.dandelion@xx.com" // 添加新的属性
console.log(person); // 抽取,将多个内容从对象中拷贝出来
const { name, age, address: { city } } = person;
console.log(name);
console.log(age);
// Error : 本质上抽取的是 city,只是对应关系是再person.address.city
// console.log(address); // Error
// console.log(address.city); // Error
console.log(city);

6、对象数组 && JSON

const todos = [
{
id: 1,
text: "Take out trash",
isCompleted: true,
},
{
id: 2,
text: "Meeting with boss",
isCompleted: true,
},
{
id: 1,
text: "Dentist appt",
isCompleted: false,
},
];
console.log(todos[1].text); // index取值 // 增删改查细节不表,本质都是数组 const todoJSON = JSON.stringify(todos); // 转为JSON
console.log(todoJSON);

7、if 条件 && 三目运算

7.1 if 条件

if-else嵌套之类的和C、Java都没有区别,细节不表

const x = "10";
const y = 11;
const z = 5; // === 比较值和类型, == 和 > 、 < 仅比较值
if (x === 10) {
console.log("x === 10");
}
if (x !== 10) {
console.log("x !== 10");
}
if (x == 10) {
console.log("x == 10");
}
if (x != 10) {
console.log("x != 10");
}
if (x > 5) {
console.log("x >= 5");
} // 逻辑或和逻辑与
if (y > 10 || z > 10) {
console.log("y > 10 || z > 10");
}
if (y > 10 && z > 10) {
console.log("y > 10 && z > 10");
}

7.2 三目运算

const flagA = true;
const flagB = false;
const flagC = true;
const flagD = false;
console.log( flagB ? "BBB" : (flagD ? "DDD" : (flagC ? "CCC" : flagA)));

8、switch

JS 中 ,switch参数可以是字符串,字符串也是基础数据类型

const color = "blue";
switch (color) {
case "red":
console.log("red");
break;
case "blue":
case "black":
console.log("blue or black");
break;
case "yellow":
console.log("yellow");
break;
default:
console.log("other");
break;
}

9、循环

9.0 准备工作

const person = {
name: "Dandelion",
age: 20,
hobbies: ["music", "movies", "sports"],
address: {
street: "50 main st",
city:"Boston",
state:"MA",
},
}; const todos = [
{
id: 1,
text: "Take out trash",
isCompleted: true,
},
{
id: 2,
text: "Meeting with boss",
isCompleted: true,
},
{
id: 1,
text: "Dentist appt",
isCompleted: false,
},
];

9.1 for 循环

9.1.1 for

for (let index = 0; index < 10; ++index) {
console.log(`for loop number: ${index}`);
}

9.1.2 forin 遍历对象属性

for (const key in person) {
console.log(`${key}: ${person[key]}`);
}

9.1.3 forof 遍历数组

for (const todo of todos) {
console.log(todo);
}

9.1.4 foreach - 引子

严格来说 foreach 属于迭代器,将在 第11节迭代器 中详细说明

9.2 while 循环

let i = 0;
while (i < 10) {
console.log(`for loop number: ${i++}`);
}

9.3 do-while 循环

let j = 0;
do {
console.log(`for loop number: ${j}`);
} while (j++ < 10);

10、函数

11、迭代器

这里需要进行一些准备工作,详见 9.0准备工作

11.1 foreach

foreach 可以按顺序访问数组中的每一个元素,一般用于遍历

// foreach 迭代器函数形式
todos.forEach(function(todo) {
console.log(todo);
}); console.log("---------------------------------------------------"); // foreach 迭代器箭头形式
todos.forEach(todo => {
console.log(todo);
});

11.2 map

  • map 可以获取对象数组中各个的某一种属性,最后使用数组将所有属性以数组的形式进行返回
  • map 也可以使用箭头形式,详见 11.4 map + filter
// map迭代器
let taskText = todos.map(function(todo) {
return todo.text;
}); //定义数组taskText来接收map的返回值
console.log(taskText); console.log("---------------------------------------------------"); // map迭代器的结果可以直接使用index,以获取其中某个个对象的某个属性值
let taskTextByIndex = todos.map(function(todo) {
return todo.text;
}); //定义数组taskTextByIndex来接收map的返回值
console.log(taskTextByIndex[1]);

11.3 filter

  • filter 是唯一有筛选效果的迭代器,一般用于获取满足筛选结果的对象的数组
  • filter 也可以使用箭头形式,详见 11.4 map + filter
let object = todos.filter(function(todo) {
return todo.isCompleted === true; // 按照筛选条件返回
});
console.log(object);

11.4 map + filter

  • filter 和 map 迭代器组合使用,仅取筛选后对象数组的某一个属性,仍得到属性值的数组
  • 这里均采用箭头形式
  • 本质上是进行了两次迭代,filter 负责筛选出满足条件的对象,map 负责取出所需的属性值,最后返回所需的属性值的数组
let taskTextByFilterAndMapArr = todos.filter(todo => {
return todo.isCompleted === true;
}).map(todo => {
return todo.text;
});
console.log(taskTextByFilterAndMapArr);

JavaScript学习笔记 - 语法篇 - 一句废话没有版的更多相关文章

  1. JavaScript学习笔记 - 入门篇(1)- 准备

    为什么学习JavaScript 一.你知道,为什么JavaScript非常值得我们学习吗? 所有主流浏览器都支持JavaScript. 目前,全世界大部分网页都使用JavaScript. 它可以让网页 ...

  2. JavaScript学习笔记 - 进阶篇(1)- JS基础语法

    前言 JavaScript能做什么? 1.增强页面动态效果(如:下拉菜单.图片轮播.信息滚动等) 2.实现页面与用户之间的实时.动态交互(如:用户注册.登陆验证等) JS进阶篇学习什么? 在JavaS ...

  3. JavaScript学习笔记 - 进阶篇(7)- 浏览器对象

    window对象 window对象是BOM的核心,window对象指当前的浏览器窗口. window对象方法: 注意:在JavaScript基础篇中,已讲解了部分属性,window对象重点讲解计时器. ...

  4. JavaScript学习笔记 - 进阶篇(2)- 数组

    什么是数组 我们知道变量用来存储数据,一个变量只能存储一个内容.假设你想存储10个人的姓名或者存储20个人的数学成绩,就需要10个或20个变量来存储,如果需要存储更多数据,那就会变的更麻烦.我们用数组 ...

  5. JavaScript学习笔记--语法二

    条件判断与C语言一样 两种循环.for 循环和 while 循环,JavaScript不区分整数和浮点数,统一用Number表示,所以不是 int i var x = 0; var i; for (i ...

  6. JavaScript学习笔记--语法

    代码风格: 每句结尾不用加分号: 单行注释用//,多行注释用/*...需要注释掉的代码....*/ 严格区分大小写 优雅的代码需要注意锁进 基础知识: Number:JavaScript不区分整数和浮 ...

  7. JavaScript学习笔记 - 进阶篇(3)- 流程控制语句

    if语句 if语句是基于条件成立才执行相应代码时使用的语句. 语法: if(条件) { 条件成立时执行代码} 注意:if小写,大写字母(IF)会出错! 假设你应聘web前端技术开发岗位,如果你会HTM ...

  8. JavaScript学习笔记 - 进阶篇(6)- JavaScript内置对象

    什么是对象 JavaScript 中的所有事物都是对象,如:字符串.数值.数组.函数等,每个对象带有属性和方法. 对象的属性:反映该对象某些特定的性质的,如:字符串的长度.图像的长宽等: 对象的方法: ...

  9. JavaScript学习笔记 - 进阶篇(8)- DOM对象,控制HTML元素

    认识DOM 文档对象模型DOM(Document Object Model)定义访问和处理HTML文档的标准方法.DOM 将HTML文档呈现为带有元素.属性和文本的树结构(节点树). 先来看看下面代码 ...

  10. JavaScript学习笔记 - 入门篇(2)- 常用互动方法

    输出内容(document.write) document.write() 可用于直接向 HTML 输出流写内容.简单的说就是直接在网页中输出内容. 第一种:输出内容用""括起,直 ...

随机推荐

  1. Go 语言:通过TDD测试驱动开发学习 Mocking (模拟)的思想

    正文: 现在需要你写一个程序,从 3 开始依次向下,当到 0 时打印 「GO!」 并退出,要求每次打印从新的一行开始且打印间隔一秒的停顿. 3   2   1   Go!   我们将通过编写一个 Co ...

  2. selenuim文件的下载

    文件下载:谷歌浏览器则会自动实现下载,不会弹出框提示,会直接下载谷歌的默认路径:火狐浏览器下载会弹出提示框,此时火狐需要添加浏览器的配置参数信息: 火狐的相关浏览器配置参数可以通过about:conf ...

  3. R语言文本数据挖掘(四)

    文本分词,就是对文本进行合理的分割,从而可以比较快捷地获取关键信息.例如,电商平台要想了解更多消费者的心声,就需要对消费者的文本评论数据进行内在信息的数据挖掘分析,而文本分词是文本挖掘的重要步骤.R语 ...

  4. idea的上git的拉取推送

    下载好idea和git idea的下载破解查看https://www.cnblogs.com/badfisher/p/14709120.html git官网要求下载即可. 获取仓库路径点击复制. 在i ...

  5. [Linux]浅析"command > /dev/null 2>&1 &" 与 "command 1>/dev/null 2>&1 &"

    1 问题描述 1.1 问题描述 在一项目中查看CENTOS 服务器的定时任务crontab时查看到如下这段命令: 命令clearLog.sh > /dev/null 2>&1 &a ...

  6. 统计机器学习-Introduction to Statistical Learning-阅读笔记-CH4-Classification

    response variable: quantitative qualitative / categorical methods for classification first predict t ...

  7. 可视化大屏的终极解决方案居然这么简单,vue-autofit一行全搞定!

    可视化大屏适配/自适应现状 可视化大屏的适配是一个老生常谈的话题了,现在其实不乏一些大佬开源的自适应插件.工具但是我为什么还要重复造轮子呢?因为目前市面上适配工具每一个都无法做到完美的效果,做出来的东 ...

  8. 基于django+ansible+webssh运维自动化管理系统

    基于django+ansible+webssh运维自动化管理系统   前言 最初开发这个基于Django ansible运维自动化管理系统的想法其实从大学时候就已经有了,但是苦于技术原因和没有线上环境 ...

  9. Jquery实现复选框的选中和取消

    复选框的选中与取消 我在网上看了好多关于这个问题的解答,好多都是一两个按钮的触发事件,有的甚至没有任何效果,经过自己的调试发现这个方法好用一点: 首先我在页面上添加了这样一个复选框 我的复选框是动态加 ...

  10. HashMap实现原理和自动扩容

    HashMap实现原理: JDK1.7:数组+单向链表(头插) 在并发情况下头插可能出现循环链表(死循环)问题.原因:因为头插,在新数组中链表的元素顺序发生了变化, 如上图,假设线程1在扩容,刚刚调整 ...