Javascript入门

JS基础

JS 速查文档

在这里插入图片描述
如果速查文档上没有,可以查看讲解文档

JS输出

// 方式1
 console.log()	// F12 来激活浏览器控制台
// 方式2
 innerHTML	// 填充元素
// 方式3
 window.alert()	// 弹窗显示
// 方式4
 document.write()	// 测试使用

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

JS 数据类型

typeof "Bill"              // 返回 "string"
typeof 3.14                // 返回 "number"
typeof true                // 返回 "boolean"
typeof false               // 返回 "boolean"
typeof x                   // 返回 "undefined" (假如 x 没有值)

typeof {name:'Bill', age:62} // 返回 "object"
typeof [1,2,3,4]             // 返回 "object" (并非 "array",参见下面的注释)
typeof null                  // 返回 "object"
typeof function myFunc(){}   // 返回 "function"

JS 函数

在这里插入图片描述
在这里插入图片描述

// 函数自调用
(function () {
  document.getElementById("demo").innerHTML = "Hello! I called myself";
})();

function myFunction1(a, b) {
  return arguments.length;	// 返回函数参数的个数
}

function myFunction2(a, b) {
  return a * b;
}
// "demo"里填入:function myFunction(a, b) { return a * b; }
document.getElementById("demo").innerHTML = myFunction2.toString();

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

// 闭包

var add = (function () {
    var counter = 0;
    return function () {return counter += 1;}
})();

add();
add();
add();

// 计数器目前是 3 

JS 对象

在 JavaScript 中,几乎“所有事物”都是对象。所有 JavaScript 值,除了原始值,都是对象。如果您理解了对象,就理解了 JavaScript。

  • 布尔是对象(如果用 new 关键词定义)
  • 数字是对象(如果用 new 关键词定义)
  • 字符串是对象(如果用 new 关键词定义)
  • 日期永远都是对象(Date)
  • 算术永远都是对象(Math)
  • 正则表达式永远都是对象(RegExp)
  • 数组永远都是对象(Array)
  • 函数永远都是对象
  • 对象永远都是对象

JavaScript 定义了 5 种原始数据类型:string,number,boolean,null,undefined。
在这里插入图片描述

// Getter 和 Setter

// Create an object:
var person = {
  firstName: "Bill",
  lastName : "Gates",
  language : "en",
  get lang() {	// Getter
  	return this.language;
  },
  set lang(value) {	// Setter
    this.language = value;
  }
};
// 使用 set 设置属性:
person.lang = "zh";
// 使用 Getter 显示对象的数据:
document.getElementById("demo").innerHTML = person.lang;

在这里插入图片描述

在这里插入图片描述

JS 事件

在这里插入图片描述

JS 数组

数组常用方法查文档

数组排序如下图示例。
在这里插入图片描述
对象数组排序如下图示例。
在这里插入图片描述
JS 数组迭代:数组迭代方法对每个数组项进行操作。

JS 作用域

JavaScript 变量的有效期始于其被创建时。局部变量会在函数完成时被删除。全局变量会在您关闭页面是被删除。


// 此处的代码能够使用 carName 变量

function myFunction() {
    carName = "porsche";	// 为尚未声明的变量赋值,此变量会自动成为全局变量。
}
var carName = "porsche";	// 所有全局变量均属于 window 对象。

// 此处的代码能够使用 window.carName
/* 
   提升(Hoisting)是 JavaScript 将声明移至顶部的默认行为,
   用 let 或 const 声明的变量和常量不会被提升!
*/

x = 5; // 把 5 赋值给 x

document.getElementById("demo").innerHTML = x; // 查找元素

var x; // Declare x,会被提升到顶部

在这里插入图片描述
严格模式下,无法使用未声明的变量,具体点击查看

JS let

/*
	ES2015 引入了两个重要的 JavaScript 新关键词:let 和 const。
	这两个关键字在 JavaScript 中提供了块作用域(Block Scope)变量(和常量)。
	在 ES2015 之前,JavaScript 只有两种类型的作用域:全局作用域和函数作用域。
*/

{ 
  var x = 10; 
}
// 此处可以使用 x

{ 
  let y = 10;
}
// 此处不可以使用 y
// 重新命名变量

var x = 10;
// 此处 x 为 10
{ 
  var x = 6;
  // 此处 x 为 6
}
// 此处 x 为 6


var y = 10;
// 此处 y 为 10
{ 
  let y = 6;
  // 此处 y 为 6
}
// 此处 y 为 10
// 循环作用域

var i = 7;
for (var i = 0; i < 10; i++) {
  // 一些语句
}
// 此处,i 为 10

let j = 7;
for (let j = 0; j < 10; j++) {
  // 一些语句
}
// 此处 j 为 7
var carName = "porsche";
// 此处的代码可使用 window.carName

let carName2 = "porsche";
// 此处的代码不可使用 window.carName2,let 关键词定义的全局变量不属于 window 对象
// 相同的作用域,不能同时用 var 和 let 声明同名变量
var x = 10;       // 允许
let x = 6;       // 不允许

{
  var x = 10;   // 允许
  let x = 6;   // 不允许
}
// 相同的作用域,不能同时用 var 和 let 声明同名变量
let x = 10;       // 允许
let x = 6;       // 不允许

{
  let x = 10;   // 允许
  let x = 6;   // 不允许
}
// 相同的作用域,不能同时用 var 和 let 声明同名变量
let x = 10;       // 允许
var x = 6;       // 不允许

{
  let x = 10;   // 允许
  var x = 6;   // 不允许
}
// 在此处,您不可以使用 carName,通过 let 定义的变量不会被提升到顶端。
let carName;

JS const

/*
	ES2015 引入了两个重要的 JavaScript 新关键词:let 和 const。
	通过 const 定义的变量与 let 变量类似,但不能重新赋值且必须声明时就赋值。
*/
const PI = 3.141592653589793;
// 可以更改常量对象的属性,但无法重新为常量对象赋值。

// 您可以创建 const 对象:
const car = {type:"porsche", model:"911", color:"Black"};

// 您可以更改属性:
car.color = "White";
/*
	在同一作用域或块中,不允许将已有的 var 或 let 变量重新声明或重新赋值给 const
*/
var x = 2;         // 允许
const x = 2;       // 不允许
{
  let x = 2;     // 允许
  const x = 2;   // 不允许
}
// 在同一作用域或块中,为已有的 const 变量重新声明声明或赋值是不允许的。
const x = 2;       // 允许
const x = 3;       // 不允许
x = 3;             // 不允许
var x = 3;         // 不允许
let x = 3;         // 不允许

{
  const x = 2;   // 允许
  const x = 3;   // 不允许
  x = 3;         // 不允许
  var x = 3;     // 不允许
  let x = 3;     // 不允许
}
// 通过 const 定义的变量不会被提升到顶端。
carName = "Volvo";    // 您不可以在此处使用 carName
const carName = "Volvo";

JS AJAX

AJAX(Asynchronous JavaScript And XML) 不刷新页面更新网页,在页面加载后从服务器发送、请求、接收数据。
在这里插入图片描述

XMLHttpRequest 对象

Ajax 的核心是浏览器内建的 XMLHttpRequest 对象。XMLHttpRequest 对象用于同服务器交换数据。(JSONP 是一种无需考虑跨域问题即可传送 JSON 数据的方法。)

AJAX 请求和响应

在这里插入图片描述

在这里插入图片描述
注释:onreadystatechange 被触发五次(0-4),每次 readyState 都发生变化。
在这里插入图片描述

JS JSON

JSON: JavaScript Object Notation(JavaScript 对象标记法)。JSON 格式仅仅是文本,它能够轻松地在服务器浏览器之间传输,并用作任何编程语言的数据格式。

// Javascript 对象转成 JSON
var myObj = { name:"Bill Gates",  age:62, city:"Seattle" };
var myJSON =  JSON.stringify(myObj);
// JSON 转成 Javascript 对象
var myJSON = '{ "name":"Bill Gates",  "age":62, "city":"Seattle" }';
var myObj =  JSON.parse(myJSON);
/* 
在 JSON 中,键必须是字符串,由双引号包围.
在 JSON 中,值必须是字符串,数字,对象(JSON 对象),数组,布尔或null。
(在 JavaScript 中,以上所列均可为值,外加函数,日期和undefined)
*/
{ "name":"Bill Gates" }

jQuery

jQuery 是一个 JavaScript 库。具体点击速查
在这里插入图片描述

Bootstrap

在这里插入图片描述

参考资料

[1] https://www.w3school.com.cn/js/index.asp

《编译原理》是计算机科学中一门极为重要的课程,主要探讨如何将高级程序设计语言转换成机器可执行的指令。清华大学的张素琴教授在这一领域有着深厚的学术造诣,其编译原理课后习题答案对于学习者而言是非常珍贵的资源。这份压缩文件详细解析了课程中所涉及的概念、理论和方法的实践应用,目的是帮助学生更好地理解编译器设计的核心内容。 编译原理的核心知识点主要包括以下几点: 词法分析:作为编译过程的首要环节,词法分析器会扫描源代码,识别出一个个称为“标记”(Token)的最小语法单位。通常借助正则表达式来定义各种标记的模式。 语法分析:基于词法分析产生的标记流,语法分析器依据文法规则构建语法树。上下文无关文法(CFG)是编译器设计中常用的一种形式化工具。 语义分析:这一步骤用于理解程序的意义,确保程序符合语言的语义规则。语义分析可分为静态语义分析和动态语义分析,前者主要检查类型匹配、变量声明等内容,后者则关注运行时的行为。 中间代码生成:编译器通常会生成一种高级的中间表示,如三地址码或抽象语法树,以便于后续的优化和目标代码生成。 代码优化:通过消除冗余计算、改进数据布局等方式提升程序的执行效率,同时不改变程序的语义。 目标代码生成:根据中间代码生成特定机器架构的目标代码,这一阶段需要考虑指令集体系结构、寄存器分配、跳转优化等问题。 链接:将编译后的模块进行合并,解决外部引用,最终形成一个可执行文件。 错误处理:在词法分析、语法分析和语义分析过程中,编译器需要能够检测并报告错误,例如语法错误、类型错误等。 张素琴教授的课后习题答案覆盖了上述所有核心知识点,并可能包含实际编程练习,比如实现简单的编译器或解释器,以及针对特定问题的解题策略。通过解答这些习题,学生可以加深对编译原理的理解,提升解决问题的能力,为今后参与编译器开发或软件工程实践奠定坚实的基础。这份资源不仅是学习编译原理的有力辅助材料,也是
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值