本文所有教程及源码、软件仅为技术研究。不涉及计算机信息系统功能的删除、修改、增加、干扰,更不会影响计算机信息系统的正常运行。不得将代码用于非法用途,如侵立删!

## JavaScript 权威指南-学习笔记

  • JavaScript是一门高级、动态、解释型变成语言,非常适合面向对象和函数式编程风格。
  • JavaScript的变量是无类型的。
  • JavaScript和Java除了表面语法大致相似,它与Java是完全不同的两门变成语言。

Hello World

Node:交互式模式输出Hello World

node
console.log("Hello World")

Node:非交互式环境输出Hello World

1.新建hello.js文件

2.文件写入:console.log("Hello World")

3.使用node 执行hello.js文件

浏览器JavaScript控制台输出

1.新建hello.js文件并写入:console.log("Hello World")

2.新建hello.html并写入:

3.在浏览器打开hello.html:file:///F:/javascript/%E7%BB%83%E4%B9%A0DEMO/hello.html

F12打开开发者工具窗口,就可以在控制台看到输出信息。

声明-关键词

  • const:声明常量(不可被修改,重新赋值会抛出TypeError)
  • let:声明变量(在同一作用域中重新声明相同变量会导致语法错误)推荐使用此方法声明变量
  • var:声明变量(使用var声明的变量作用域为包含函数,而非包含块,这可能会导致隐含的错误,推荐使用let)
  • funtion:定义函数
  • class:定义类

对象

创建对象

  • 直接创建对象

    let empty = {}; //没有属性的对象
    let point = {x:0, y:0}; //包含两个属性的对象
  • 使用new创建对象

    let a = new Object(); //创建一个空对象,与{}相同
    let b = new Array(); //创建一个空数组,与[]相同
    let c = new Date(); //创建一个表示当前时间的日期对象
    let d = new Map(); //创建一个映射对象,用于存储键值对
  • 使用Object.create()创建对象

    Object.create()用于创建一个新对象,使用其第一个参数作为新对象的原型:

    let a = object.create({x: 1, y: 2}); // a继承属性x和y
    a.x + a.y // =>3

读取对象属性

要获取一个对象的值,可以使用(.)或([])操作符

let point = {x:0, y:0}; //包含两个属性的对象
let a = point.x // 获取point的x属性值
let b = point["y"] // 获取point的y属性值

写入对象属性

要创建或设置属性,与查询属性一样,可以使用(.)或([]),只是要把他们放到赋值表达式的左边

let point = {x:0, y:0}; //包含两个属性的对象
point.a = 0;
point["b"] = 0;

删除对象属性

  • delete操作符用于从对象中移除属性
  • delete并不操作属性的值,而是操作属性本身
  • delete操作符只删除自身属性,不删除继承属性

检查对象属性

  • in

    let o = {x: 1};
    "x" in o // =>true: o有自身属性"x"
    "y" in o // =>false: o没有属性"y"
    "toString" in o // =>true: o继承了toString的属性
  • hasOwnProperty().

    对象hasOwnProperty()方法用于测试对象是否有给定名字的属性,对继承的属性返回false

    let o = {x: 1};
    o.hasOwnProperty("x"); // =>true: o有自身属性"x"
    o.hasOwnProperty("y") // =>false: o没有属性"y"
    o.hasOwnProperty("toString") // =>false: toString是继承属性
  • object.assign():从一个对象向另一个对象复制属性

数组

创建数组

  • 直接创建

    let empty = []; // 没有元素的数组
    let primes = [1, 2, 3, 4, 5]; // 有5个数值元素的数组
    let misc = [1.1, true, "a",]; // 3种不同类型的元素,最后还有一个逗号
  • Array()创建数组

    • 不传参调用

      let a = new Array(); // 创建一个空数组
    • 创建一个数组,并指定长度

      let a = new Array(10); // 创建一个指定长度的数组
    • 创建两个或更多个数组元素,或传入一个非数值元素

      let a = new Array(5, 4, 3, 2,1, "testing, testing"); // 创建一个指定长度的数组
  • Array.of()创建一个带元素的数组

    Array.of()  // =>[]; 返回没有参数的空数组
    Array.of(10) // =>[10]; 创建只有一个数值元素的数组
    Array.of(1,2,3) // =>[1,2,3];
  • Array.from()通过字符串创建一个数组

    var myArr = Array.from("RUNOOB"); // =>[ 'R', 'U', 'N', 'O', 'O', 'B' ]

读写数组

  • 使用 [] 操作符访问数组元素

    let a = ["world"]; // 先创建包含一个元素的数组
    let value = a[0]; // 读取元素0
    a[1] = 3.14; // 写入元素1

    超出索引会返回undefined,不会报错

添加和删除数组元素

  • 数组添加元素

    let a = []; //创建一个空数组
    a[0] = "zero"; //添加一个元素
    a.push("one"); //在末尾添加一个值

flat()和flatMap()打平数组

  • flat()打平一级嵌套

    [1, [2, 3]].flat()  //=>[1, 2, 3]
    [1, [2, [3]]]].flat() //=>[1, 2, [3]]
  • flat() 传参打平多层级嵌套

    let a = [1,[2,[3,4]]];
    a.flat(1) //=> [1,2,[3,4]]
    a.flat(2) //=> [1,2,3,4]

数组转换为字符串

  • join()

    let a = [1, 2, 3];
    a.join() //=>"1,2,3"
    a.join(" ") //=>"1 2 3"
    a.join("") //=>"123"
    let b = new Array(10); //长度为10但没有元素的数组
    b.join("-") //=>"---------":包含9个连字符的字符串
  • toString()

    [1,2,3].toString() //=>"1,2,3"
    ["a", "b", "c"].toString() //=>"a,b,c"
    [1, [2, "c"]].toString() //=>"1,2,c"

如果想把数组的文本内容保存起来以备后用,可以使用JSON.stringify()

数组迭代

1.数组循环

var officers = [s

    { id: 20, name: 'Captain' },

    { id: 24, name: 'General' },

    { id: 56, name: 'Admiral' },

    { id: 88, name: 'Commander' }

];

2.for循环,使用率最高,也是最基本的一种遍历方式

var officersIds = [];

for(var i=0,len=officers.length;i<len; i++){

    officersIds.push(officers[i].id);

}

console.log(officersIds); // [20,24,56,88]

3.forEach循环

forEach中传入要执行的回调函数,函数有三个参数。第一个参数为数组元素(必选),第二个参数为数组元素索引值(可选),第三个参数为数组本身(可选)

var officersIds = [];

officers.forEach(function (officer,index,array) {

    console.log(index); //0,1,2,3,

    console.log(officer); //{id: 20, name: "Captain Piett"},{id: 24, name: "General Veers"},{id: 56, name: "Admiral Ozzel"},{id: 88, name: "Commander Jerjerrod"}

    officersIds.push(officer.id);

});

console.log(officersIds); //[20,24,56,88]

4.for in循环

for...in循环可用于循环对象和数组,推荐用于循环对象,可以用来遍历JSON

var officersIds = [];

for(var key in officers){

    console.log(key); // 0 1 2 3 返回数组索引

    console.log(officers[key]); //{id: 20, name: "Captain Piett"},{id: 24, name: "General Veers"},{id: 56, name: "Admiral Ozzel"},{id: 88, name: "Commander Jerjerrod"}

    officersIds.push(officers[key].id);

}

console.log(officersIds); //[20,24,56,88]

5.for of循环

可循环数组和对象,推荐用于遍历数组。

for...of提供了三个新方法:

key()是对键名的遍历;

value()是对键值的遍历;

entries()是对键值对的遍历;

let arr = ['科大讯飞', '政法BG', '前端开发'];

for (let item of arr) {  

  console.log(item); //  科大讯飞  政法BG  前端开发

}

// 输出数组索引

for (let item of arr.keys()) {  

  console.log(item);  // 0 1 2

}

// 输出内容和索引

for (let [item, val] of arr.entries()) {  

  console.log(item + ':' + val); //  0:科大讯飞  1:政法BG  2:前端开发

}

var officersIds = [];

for (var item of officers) {

    console.log(item); //{id: 20, name: "Captain Piett"},{id: 24, name: "General Veers"},{id: 56, name: "Admiral Ozzel"},{id: 88, name: "Commander Jerjerrod"}

    officersIds.push(item.id);

}

console.log(officersIds); // [20,24,56,88]

// 输出数组索引

for(var item of officers.keys()){

    console.log(item); // 0 1 2 3

}

// 输出内容和索引

for (let [item, val] of officers.entries()) {

    console.log(item) // 0 1 2 3 输出数组索引

    console.log(val);//{id: 20, name: "Captain Piett"},{id: 24, name: "General Veers"},{id: 56, name: "Admiral Ozzel"},{id: 88, name: "Commander Jerjerrod"}

    console.log(item + ':' + val);

}

6.map循环

map() 会返回一个新数组,数组中的元素为原始数组元素调用函数处理后的值。

map() 方法按照原始数组元素顺序依次处理元素。

map 不修改调用它的原数组本身。

map()中传入要执行的回调函数,函数有三个参数。第一个参数为数组元素(必选),第二个参数为数组元素索引值(可选),第三个参数为数组本身(可选)

var arr = [

    {name:'a',age:'18'},

    {name:'b',age:'19'},

    {name:'c',age:'20'}

];

arr.map(function(item,index) {

    if(item.name == 'b') {

        console.log(index)  // 1

    }

})

7.filter

filter() 方法创建一个新的数组,新数组中的元素是通过检查指定数组中符合条件的所有元素。

array.filter(function(currentValue,index,arr){

}, thisValue)

var designer = peoples.filter(function (people) {

    return people.job === "designer";

});

组合使用

var totalScore = peoples

    .filter(function (person) {

        return person.isForceUser;

    })

    .map(function (choose) {

        return choose.mathScore + choose.englishScore;

    })

    .reduce(function (total, score) {

        return total + score;

    }, 0);

Array.from()

var divs = document.querySelectorAll('div.pane');  

var text = Array.from(divs, (d) => d.textContent);  

console.log("div text:", text);

// Old, ES5 way to get array from arguments

function() {  

  var args = [].slice.call(arguments);

  //...

}

// Using ES6 Array.from

function() {  

  var args = Array.from(arguments);

  //..

}

var filled = Array.from([1,,2,,3], (n) => n || 0);  

console.log("filled:", filled);  

// => [1,0,2,0,3]
本文仅供学习交流使用,如侵立删!

JavaScript 权威指南-学习笔记(一)的更多相关文章

  1. JavaScript权威指南学习笔记6

    这两天主要翻看了书中的第18-22章,重点看了第17章:事件化处理,其它几章节主要是翻了下书知道有相关的概念,没有真正理解其中的内容,或者没有考虑究竟如何能把里面的内容应用到实际的项目中.说的讽刺一点 ...

  2. javascript权威指南学习笔记1

    打开这本书,进入到javascript的世界.以前都是看各种视频,感觉什么收获也没有,反而弄得脑袋混乱,希望能够按照这本书的节奏掌握javascript这门语言,为我的前端学习打下基础. 学习前准备: ...

  3. JavaScript权威指南学习笔记4

    今天看了第9.10.11章,感觉收获最大还是正则表达式那章节,不过这些不用太多脑子思考,问题用到了直接查书就可以了,下面分别总结一下: 第9章类和模块:分9节,前面8节都是在讲类相关的知识,最后一节讲 ...

  4. Javascript权威指南学习笔记

    第二章:词法结构 ;function a(){alert(2)};//前面的分号保证正确地语句解析 第三章:类型.值和变量 基本概念: 1.数据类型---能够表示并操作的值的类型叫做数据类型. 2.变 ...

  5. javascript权威指南学习笔记3

    今天看到第四章,记录一下其中的几个点,俗话说:好记性不如烂笔头嘛. 4.9   in运算符和instanceof运算符 in运算符希望它的左操作数是一个字符串或可以转化为字符串,希望它的右操作数是一个 ...

  6. javascript权威指南学习笔记2

    Javascript语言核心(2~12章) 第三章:类型.值.变量 1.数字: overflow(Infinity, -Infinity).underflow(+0,-0) 非数字值:它和任何值都不相 ...

  7. JavaScript权威指南学习笔记5

    下午在杭图回去前看了书中第二部分的13-17章,看的很粗,感觉大部分东西自己已经知道或者平时开发中不会用到,很多章节只是简单的翻了一下,没有仔细思考里面说到的道理,下面对各章节简单的记录下. 第13章 ...

  8. HTTP权威指南-学习笔记

    目录 HTTP权威指南-学习笔记 HTTP: Web的基础 URL与资源 HTTP报文 连接管理 HTTP结构 Web服务器 代理 缓存 集成点: 网关,隧道及中继 Web机器人 识别,认证与安全 客 ...

  9. CSS权威指南学习笔记系列(1)CSS和文档

    题外话:HTML是一种结构化语言,而CSS是它的补充:这是一种样式语言.CSS是前端三板斧之一,因此学习CSS很重要.而我还是菜鸟,所以需要加强学习CSS.这个是我学习CSS权威指南的笔记,如有不对, ...

随机推荐

  1. python之生成器与模块

    目录 生成器对象 自定义range方法 生成器表达式 模块 简介 模块的导入方式 第一种:import ... 第二种:from ... import ... 补充 生成器对象 生成器对象其实本质还是 ...

  2. 类型转换——JavaSE基础

    类型转换 类型判断 可以通过Instanceof关键字判断左操作数是否是右操作数的父类或本身 强制类型转换 不能对布尔值进行转换 不能将对象类型转换为不相关的类型 把高容量转向低容量时,需要进行强制类 ...

  3. VMware虚拟机基于contos 7 搭建lnmp环境全过程

    这个环境也整了几次了,由于本人比较懒,没有记住.找资料很麻烦,就自己动手咯 1.下载VMware虚拟机   (有注册码)     地址:http://www.zdfans.com/5928.html ...

  4. 解决Windows微软账户无法登录

    更新记录 2022年4月16日:本文迁移自Panda666原博客,原发布时间:2021年8月25日. 将DNS的服务器地址修改为4.2.2.1或者4.2.2.2就可以解决无法登录microsoft账户 ...

  5. [自制操作系统] 第04回 完善MBR

    目录 一.前景回顾 二.改写MBR 三.实现loader 一.前景回顾 在之前我们说到,MBR的作用便是加载操作系统内核到指定位置.而MBR需要通过读取硬盘来获得操作系统内核.在上一回我们已经讲解了硬 ...

  6. JVM学习笔记-从底层了解程序运行(二)

    解决JVM运行中的问题 一个案例理解常用工具 测试代码: /** * 从数据库中读取信用数据,套用模型,并把结果进行记录和传输 */ public class T15_FullGC_Problem01 ...

  7. 关于webstorm更换主题

    现在我们前端使用编辑器,只要用习惯就好,不过这里推荐使用webstorm,因为被称为,'js神器'的称号,不是白说的.接下来我们来看下怎么引入主题. 下面有一个网站,这个网站的名字叫 http://w ...

  8. 【python基础】第08回 流程控制 for循环

    本章内容概要 1.循环结构之 for 循环 本章内容详解 1.循环结构之for循环 1.1 语法结构 for 变量名 in 可迭代对象: #字符串 列表 字典 元组 for 循环的循环体代码 针对变量 ...

  9. sqlserver 把c#代码的string[] 的ids转换成一个数据table表

    declare @string varchar(200),@sql varchar(1000)set @string = '1,2,3,4,5,6'set @sql = 'select code='' ...

  10. 记一次 .NET 差旅管理后台 CPU 爆高分析

    一:背景 1. 讲故事 前段时间有位朋友在微信上找到我,说他的 web 系统 cpu 运行一段时候后就爆高了,让我帮忙看一下是怎么回事,那就看吧,声明一下,我看 dump 是免费的,主要是锤炼自己技术 ...