ESC
输入关键词搜索文章
目录

Javascript

参考

介绍

JavaScript 是一种轻量级的编程语言。

JavaScript 是可插入 HTML 页面的编程代码。

JavaScript 插入 HTML 页面后,可由所有的现代浏览器执行。

JavaScript 很容易学习。

基本特性

安装

如何使用

输出

注释

调试

严格模式

常见错误

比较运算符常见错误

var x = 10;
var y = "10";
if (x = y) // true, and now x is "10"
if (x == y) // true
if (x === y) // false

加法与连接

  1. 加法运算符 + 用于数字相加,字符串拼接,对象合并。
  2. 连接运算符 + 用于字符串拼接,数字转字符串。
var x = 10;
var y = 5;
var z = x + y;           
// z 的结果为 15
var x = 10;
var y = "5";
var z = x + y;           
// z 的结果为 "105"

var a = "Hello " + "World"; // "Hello World"
var b = "Hello " + 10; // "Hello 10"

精度问题

runoob

 var x = 0.1;
var y = 0.2;
var z = x + y            // z 的结果为 0.30000000000000004
if (z == 0.3)            // 返回 false

解决方法:

var x = 0.1;
var y = 0.2;
var z = (x + y).toFixed(2); // z 的结果为 "0.30"
if (z == "0.30") // 返回 true


var x = 0.1;
var y = 0.2;
if (Math.abs(x + y - 0.3) < Number.EPSILON) // 返回 true

return使用

function myFunction(a) {
  var    power = 10;      
  return
      a * power;
}

返回undefined,因为return默认本行结尾,所以return后面的代码不会执行。

keywords

typeof "John"                // 返回 string
typeof 3.14                  // 返回 number
typeof false                 // 返回 boolean
typeof [1,2,3,4]             // 返回 object
typeof {name:'John', age:34} // 返回 object

this

<button onclick="this.style.display='none'">
点我后我就消失了
</button>

在 JavaScript 中函数也是对象,对象则有方法,apply 和 call 就是函数对象的方法。这两个方法异常强大,他们允许切换函数执行的上下文环境(context),即 this 绑定的对象。

在下面实例中,当我们使用 person2 作为参数来调用 person1.fullName 方法时, this 将指向 person2, 即便它是 person1 的方法:

var person1 = {
  fullName: function() {
    return this.firstName + " " + this.lastName;
  }
};

var person2 = {
  firstName: "Jane",
  lastName: "Doe"
};

person1.fullName.apply(person2); // Output: "Jane Doe"

作用域

JavaScript 有两种作用域:全局作用域和函数作用域。

全局作用域:在函数外部定义的变量拥有全局作用域,它可以被所有函数访问和修改。

函数作用域:在函数内部定义的变量拥有函数作用域,它只能被该函数内部访问和修改。

// 全局作用域
var x = 10;

function myFunction() {
  // 函数作用域
  var y = 20;

## Les variables

变量必须以字母或下划线开头,不能以数字开头。

```js
var x = 10;
var y = "Hello World";
var _z = true;

可以在一条语句中声明多个变量,并用逗号分隔,可以同时初始化:

var x, y, z;
x = 10;
y = "Hello World";
z = true;

var x=10, y="Hello World", z=true;

变量类型

分为值类型(基本类型)和引用类型(对象类型)。

值类型:

引用类型:

变量声明提升

JavaScript 引擎在执行代码时,会先扫描代码,将变量声明移动到函数的最前面,然后再执行代码。

但是赋值操作不会被提升,所以如果变量声明和赋值分开写,变量声明不会被提升,而变量的值会被覆盖。

let 关键字定义的变量不可以在使用后声明,也就是变量需要先声明再使用。

x = 10;
console.log(x); // Output: 10
var x;

Les mots clés

Si je donne une variable sans le mot clé var, elle sera considérée comme une propriété de l'objet global window.

非严格模式下给未声明变量赋值创建的全局变量,是全局对象的可配置属性,可以删除。

var var1 = 1; // 不可配置全局属性
var2 = 2; // 没有使用 var 声明,可配置全局属性

console.log(this.var1); // 1
console.log(window.var1); // 1
console.log(window.var2); // 2

delete var1; // false 无法删除
console.log(var1); //1

delete var2; 
console.log(delete var2); // true
console.log(var2); // 已经删除 报错变量未定义
// Déclaration d'une variable globale
name = "John";

// Déclaration d'une variable locale à la fonction
function greet() {
  name = "Mike";
  console.log("Hello, my name is " + name);
}


// Déclaration d'une variable locale à la portée d'un bloc
if (true) {
  let age = 30;
  console.log("I am " + age + " years old.");
}

// Déclaration d'une variable locale à la portée d'un bloc et ne peut être modifiée
const PI = 3.14159265359;

// Vérification du type d'une variable
console.log(typeof name); // Output: "string"
console.log(typeof age); // Output: "undefined"
console.log(typeof PI); // Output: "number"

// Vérification de l'instance d'une classe
const person = new Object();
console.log(person instanceof Object); // Output: true
console.log(person instanceof Array); // Output: false

global and local variables

在 JavaScript 中,函数内部的局部变量通常不可以直接被外部作用域访问,但有几种方式可以将函数内的局部变量暴露给外部作用域,具体如下:

// 全局变量
var name = "John";


// 局部变量
function greet() {
  var name = "Mike";
  console.log("Hello, my name is " + name);
}

greet(); // Output: "Hello, my name is Mike"
console.log(name); // Output: "John"

// 通过全局对象暴露局部变量
function greet() {
  var name = "Mike";
  window.myName = name;
  console.log("Hello, my name is " + window.myName);
}

greet(); // Output: "Hello, my name is Mike"
console.log(name); // Output: "John"
console.log(window.myName); // Output: "Mike"

// 通过闭包暴露局部变量
function greet() {
  var name = "Mike";
  return function() {
    console.log("Hello, my name is " + name);
  }
}

var greetFunc = greet();
greetFunc(); // Output: "Hello, my name is Mike"

Life cycle of a variable

var x = 10; // Creation and initialization
console.log(x); // Output: 10

x = 20; // Reassignment
console.log(x); // Output: 20

delete x; // Deletion, return false because x is declared with var
console.log(x); // Output: 20

z = 40; // Creation and initialization
console.log(z); // Output: 40

delete z; // Deletion, return true because z is declared without var
console.log(z); // Output: undefined

number

也可以使用科学计数法表示:

var x = 1e3; // 1000
var y = 2.5e6; // 2500000
var z = -3e2; // -300

string

string object:

creation:

accessing properties:

constructor returns the function that created the object.

var str = "Hello World";
console.log(str.length); // Output: 11
console.log(str.constructor); // Output: function String() { [native code] }

methods:

模板字符串

模板字符串使用反引号 `` 作为字符串的定界符分隔的字面量。

模板字面量是用反引号(`)分隔的字面量,允许多行字符串、带嵌入表达式的字符串插值和一种叫带标签的模板的特殊结构。

var name = "John";
var age = 30;
var message = `Hello, my name is ${name} and I'm ${age} years old.`;
console.log(message); // Output: "Hello, my name is John and I'm 30 years old."

字符串转换

转化为string的方法:

var num = 10;
var str = String(num);
console.log(str); // Output: "10"


var num2 = 1234.56;
var str2 = num2.toString();
console.log(str2); // Output: "1234.56"

var num3 = 1234.56;
var str3 = num3.toLocaleString();
console.log(str3); // Output: "1,234.56"

转化为number的方法:

var str = "10";
var num = Number(str);
console.log(num); // Output: 10


var str2 = "1234.56";
var num2 = parseFloat(str2);
console.log(num2); // Output: 1234.56

var str3 = "1,234.56";
var num3 = parseInt(str3);
console.log(num3); // Output: 1234
var str = "10";
var num = +str;
console.log(num); // Output: 10

var str2 = "1234.56";
var num2 = +str2;
console.log(num2); // Output: 1234.56

var str3 = "1,234.56";
var num3 = +str3;
console.log(num3); // Output: 1234

boolean

null et Undefined

Undefined 这个值表示变量不含有值。

可以通过将变量的值设置为 null 来清空变量。

在 JavaScript 中, null 用于对象, undefined 用于变量,属性和方法。

对象只有被定义才有可能为 null,否则为 undefined。

object

accessing object properties:

accessing object methods:

you can also consider methods as properties of an object:

var obj = {
  name: "John",
  age: 30,
  city: "New York",
  sayHello: function() {
    console.log("Hello, my name is " + this.name + " and I'm " + this.age + " years old.");
  }
};

obj.sayHello(); // Output: "Hello, my name is John and I'm 30 years old."
obj.sayHello; //Output: function(){console.log("Hello, my name is " + this.name + " and I'm " + this.age + " years old.");}
//不加括号,调用sayHello方法,输出函数体,也即函数的定义表达式。

array

Les opérateurs

Les opérateurs de strings

var str = "Hello";
var str2 = "World";
var str3 = str + " " + str2;
console.log(str3); // Output: "Hello World"

str += " ";
str += str2;
console.log(str); // Output: "Hello World"


var str4 = "Hello World";
console.log(str4.charAt(0)); // Output: "H"
console.log(str4.charAt(6)); // Output: "W"
console.log(str4.charAt(7)); // Output: undefined (index out of range)
console.log(str4.charAt(str4.length - 1)); // Output: "d"
console.log(str4.charAt(str4.length)); // Output: undefined (index out of range)

console.log(str4.concat("!!!")); // Output: "Hello World!!!"

console.log(str4.indexOf("l")); // Output: 2
console.log(str4.indexOf("z")); // Output: -1 (not found)
console.log(str4.lastIndexOf("l")); // Output: 9
console.log(str4.lastIndexOf("z")); // Output: -1 (not found)


var str5 = "Hello World";
console.log(str5.localeCompare("Hello")); // Output: 1 (str5 > "Hello")
console.log(str5.localeCompare("World")); // Output: -1 (str5 < "World")
console.log(str5.localeCompare("hello")); // Output: 1 (str5 > "hello")
console.log(str5.localeCompare("world")); // Output: -1 (str5 < "world")

console.log(str5.match(/l/g)); // Output: ["l", "l"]
console.log(str5.match(/z/g)); // Output: null (not found)

console.log(str5.replace(/l/g, "X")); // Output: "HeXXo WorXd"
console.log(str5.replace(/z/g, "X")); // Output: "Hello World"

console.log(str5.search(/l/)); // Output: 2
console.log(str5.search(/z/)); // Output: -1 (not found)


console.log(str5.slice(0, 5)); // Output: "Hello"
console.log(str5.slice(6)); // Output: "World"
console.log(str5.slice(7)); // Output: "" (empty string)

console.log(str5.split(" ")); // Output: ["Hello", "World"]
console.log(str5.split("l")); // Output: ["He", "lo Wor", "o Wor", " Worl", "d"]


console.log(str5.substring(0, 5)); // Output: "Hello"
console.log(str5.substring(6)); // Output: "World"
console.log(str5.substring(7)); // Output: "World"

console.log(str5.toLowerCase()); // Output: "hello world"
console.log(str5.toUpperCase()); // Output: "HELLO WORLD"


console.log(str5.trim()); // Output: "Hello World"

Les opérateurs de comparaison

var x = 10;
var y = "10";

console.log(x == y); // Output: true
console.log(x === y); // Output: false
console.log(x!= y); // Output: false
console.log(x !== y); // Output: true


var a = 10;
var b = 20;

console.log(a < b); // Output: true
console.log(a > b); // Output: false
console.log(a <= b); // Output: true
console.log(a >= b); // Output: false

Les opérateurs logiques

var a = true;
var b = false;

console.log(a && b); // Output: false
console.log(a || b); // Output: true
console.log(!a); // Output: false
console.log(!b); // Output: true
var a = true;
var b = false;
var c = a? "Hello" : "Goodbye";
console.log(c); // Output: "Hello"

Les opérateurs arithmétiques

var x = 10;
var y = 5;

console.log(x + y); // Output: 15
console.log(x - y); // Output: 5
console.log(x * y); // Output: 50
console.log(x / y); // Output: 2
console.log(x % y); // Output: 0

var z = 10;
z++; // increment
console.log(z); // Output: 11
z--; // decrement
console.log(z); // Output: 10

Les structures de contrôle

Les conditions

if

if (condition) {
  // code to be executed if condition is true
} else if (condition2) {
  // code to be executed if condition2 is true and condition is false
} else {
  // code to be executed if both condition and condition2 are false
}

switch

switch (expression) {
  case x:
    // code block
    break;
  case y:
    // code block
    break;
  default:
    // code block
}

Boncles

for

for (initialization; condition; increment/decrement) {
  // code to be executed
}

for/In loop

for (var i in object) {
  // code to be executed for each property of the object
}

for/of loop

for (var value of iterable) {
  // code to be executed for each value of the iterable
}

while

while (condition) {
  // code to be executed
}

do-while

do {
  // code to be executed
} while (condition);

error handling

try {
  // code to be executed
} catch (error) {
  // code to be executed if an error occurs
} finally {
  // code to be executed regardless of whether an error occurred or not
}

example:

try {
  var x = 10;
  var y = 0;
  var z = x / y;
  console.log(z);
} catch (error) {
  console.log("Error: " + error.message);
} finally {
  console.log("The try block is finished.");
}

抛出异常:

function myFunction() {
    var message, x;
    message = document.getElementById("message");
    message.innerHTML = "";
    x = document.getElementById("demo").value;
    try { 
        if(x == "")  throw "值为空";
        if(isNaN(x)) throw "不是数字";
        x = Number(x);
        if(x < 5)    throw "太小";
        if(x > 10)   throw "太大";
    }
    catch(err) {
        message.innerHTML = "错误: " + err;
    }
}

Fonction

function bonjour(NOM) {
var Bnom="bonjour"+NOM;
return Bnom; // facultatif
}

Fonction est un objet

function mkTrace() {
 var compteur_interne=0;
 return function(s){
  console.log(compteur_interne + " " + s);
  compteur_interne++;
 }
}

// Chaque appel à la fonction mkTrace génère un scope qui ne disparaît pas après la fin de l'exécution de la fonction. 

var trace2 = mkTrace(); 
var trace3 = mkTrace(); 

trace2 et trace3 sont deux objets de fonction, elles ont chacune un compteur_interne

On peut même les mettre dans un dict !!!

function mkDebug2(compteur_max){
 //faire renvoyer une fonction debug permettant d'afficher compteur_max fois
 var compteur_interne = 1;

 var o = {
  "print": function(s){
   if(compteur_interne<=compteur_max){
    trace(compteur_interne++ + " " + s);
   }
  },
  "getCompteur" : function (){ return compteur_interne;},
  "setCompteur" : function(v){compteur_interne=v;},
  "resetCompteur" : function(){compteur_interne=1;},
  "setMax": function(m){compteur_max=m;},
  "getMax": function(){return compteur_max;},
 }

 return o;
}
var oDbg1 = mkDebug2(3);
oDbg1.print("coucou");

Les fonctions importantes

interactions

Gestion d'événement

Événement Description
Abort L&#39;utilisateur interrompt le chargement de l&39;image
Blur L'élément perd le focus
Change L&#39;utilisateur modifie le contenu d&39;un champ de données
Click L&#39;utilisateur clique sur l&39;élément
Dblclick L&#39;utilisateur double-clique sur l&39;élément
Dragdrop L'utilisateur effectue un glisser-déposer sur la fenêtre du navigateur
Error Une erreur apparaît durant le chargement de la page
Focus L'utilisateur donne le focus à un élément
Keydown L'utilisateur appuie sur une touche de son clavier
Keypress L'utilisateur maintient une touche du clavier enfoncée
Keyup L'utilisateur relâche une touche du clavier préalablement enfoncée
Load Le navigateur a fini de charger la page en cours
MouseOver L&#39;utilisateur positionne le curseur de la souris au-dessus d&39;un élément
MouseOut Le curseur de la souris quitte un élément
Reset L&#39;utilisateur efface les données d&39;un formulaire à l'aide du bouton Reset
Resize L'utilisateur redimensionne la fenêtre du navigateur
Select L'utilisateur sélectionne un texte dans un champ de type "text" ou "textarea"
Submit L&#39;utilisateur clique sur le bouton de soumission d&39;un formulaire
Unload Le navigateur de l'utilisateur quitte la page en cours
Propriété Description
altKey Returns whether or not the "ALT" key was pressed
ctrlKey Returns whether or not the "CTRL" key was pressed
metaKey Returns whether or not the "meta" key was pressed
shiftKey Returns whether or not the "SHIFT" key was pressed
clientX Returns the horizontal coordinate of the mouse pointer
clientY Returns the vertical coordinate of the mouse pointer
keyCode Code ASCII
srcElement Élément à l’origine de l’événement

Accès au DOM

函数与局部变量

function myFunction() {
  var x = 10;
  console.log(x);
}

myFunction(); // Output: 10

函数内部声明的变量,只在函数内部有效,函数执行完毕后,变量也就消失了。

function myFunction() {
  var x = 10;
  console.log(x);
  x = 20;
  console.log(x);
}

myFunction(); // Output: 10 20

函数外部声明的变量,是全局变量,可以在函数内部修改,外部也可以访问到。

function myFunction() {
  var x = 10;
  console.log(x);
  x = 20;
  console.log(x);
}

var y = 30;
myFunction(); // Output: 10 20
console.log(y); // Output: 30

事件与函数

<!DOCTYPE html>
<html>
<head>
<script>
function myFunction()
{
    document.getElementById("demo").innerHTML="我的第一个 JavaScript 函数";
}
</script>
</head>
<body>
<h1>我的 Web 页面</h1>
<p id="demo">一个段落</p>
<button type="button" onclick="myFunction()">尝试一下</button>
</body>
</html>

以上代码允许函数在事件click发生时执行。

事件参考html#事件

箭头函数

var myFunc = (x, y) => {
  return x + y;
}

console.log(myFunc(2, 3)); // Output: 5

箭头函数没有自己的 this,它会捕获其所在作用域的 this 值。

var obj = {
  x: 10,
  y: 20,
  myFunc: function() {
    var self = this;
    setTimeout(function() {
      console.log(self.x + self.y);
    }, 1000);
  }
}

obj.myFunc(); // Output: 30 (after 1 second)

箭头函数不能使用 arguments 对象,如果需要的话,可以用 rest 参数代替。

var myFunc = (x, y,...args) => {
  return x + y + args.reduce((acc, cur) => acc + cur, 0);
}

console.log(myFunc(2, 3, 4, 5)); // Output: 14

闭包

function myFunc() {
  var x = 10;
  return function() {
    return x;
  }
}

var myClosure = myFunc();
console.log(myClosure()); // Output: 10

闭包可以访问函数内部的变量,即使函数执行完毕后,变量也不会被销毁。

function myFunc() {
  var x = 10;
  return function() {
    return x;
  }
}

var myClosure = myFunc();
console.log(myClosure()); // Output: 10
myFunc = null;
console.log(myClosure()); // Output: 10

Default parameters and arguments

function myFunc(x = 10) {
  return x;
}

x = findMax(1, 123, 500, 115, 44, 88);
 
function findMax() {
    var i, max = arguments[0];
    
    if(arguments.length < 2) return max;
 
    for (i = 0; i < arguments.length; i++) {
        if (arguments[i] > max) {
            max = arguments[i];
        }
    }
    return max;
}

Librairie

Définition d'une librairie

<script src="lib.js">
// rien ici !
// le fichier lib.js 
// ne contiendra 
// pas les balises 
</script>

Math

Date

正则表达式

正则表达式

修饰符

匹配模式

量词:

元字符:

例子

普通:

var str = "Hello World";
var regex = /World/;
var result = str.match(regex);
console.log(result); // Output: ["World"]

忽略大小写:

var str = "Hello World";
var regex = /world/i;
var result = str.match(regex);
console.log(result); // Output: ["World"]

匹配字符串的开始:

var str = "Hello World";
var regex = /^Hello/;
var result = str.match(regex);
console.log(result); // Output: ["Hello"]

匹配字符串的结束且忽略大小写:

var str = "Hello World";
var regex = /world$/i;
var result = str.match(regex);
console.log(result); // Output: ["World"]

匹配任意小写字母:

var str = "Hello World";
var regex = /[a-z]/;
var result = str.match(regex);
console.log(result); // Output: ["H", "e", "l", "l", "o", " ", "W", "o", "r", "l", "d"]

匹配除了a-z之外的字符:

var str = "Hello World";
var regex = /[^a-z]/;
var result = str.match(regex);
console.log(result); // Output: ["H"]

匹配数字:

var str = "Hello World 1";
var regex = /\d/;
var result = str.match(regex);
console.log(result); // Output: ["1"]

匹配字母、数字或下划线:

var str = "Hello World";
var regex = /\w/;
var result = str.match(regex);
console.log(result); // Output: ["H", "e", "l", "l", "o", "W", "r", "d"]

匹配空白字符:

var str = "Hello World";
var regex = /\s/;
var result = str.match(regex);
console.log(result); // Output: [" "]
var str = "Hello World";
var regex = /Hello\sWorld/;
var result = str.match(regex);
console.log(result); // Output: ["Hello World"]
var str = "Hello World";
var regex = /Hello\s\w+/;
var result = str.match(regex);
console.log(result); // Output: ["Hello World"]
var str = "Hello World";
var regex = /Hello\s\w+/g;
var result = str.match(regex);
console.log(result); // Output: ["Hello World"]

Search方法

var str = "Hello World";
var regex = /World/;
var result = str.search(regex);
console.log(result); // Output: 6

Replace方法

var str = "Hello World";
var regex = /World/g;
var result = str.replace(regex, "Universe");
console.log(result); // Output: "Hello Universe"

不区分大小写:

var str = "Hello World";
var regex = /world/gi;
var result = str.replace(regex, "Universe");
console.log(result); // Output: "Hello Universe"

Test方法

var str = "Hello World";
var regex = /World/;
var result = regex.test(str);
console.log(result); // Output: true

exec方法

var str = "Hello World";
var regex = /World/;
var result = regex.exec(str);
console.log(result); // Output: ["World"]

JavaScript表单验证

<form name="myForm" action="demo_form.php" onsubmit="return validateForm()" method="post">
名字: <input type="text" name="fname">
<input type="submit" value="提交">
</form>
function validateForm() {
    var x = document.forms["myForm"]["fname"].value;
    if (x == null || x == "") {
        alert("需要输入名字。");
        return false;
    }
}

CSS伪类选择器:

Selector Description
:disabled Selects input elements with the "disabled" attribute
:invalid Selects invalid input elements
:optional Selects input elements without the "optional" attribute
:required Selects input elements with the "required" attribute
:valid Selects input elements with valid values

JSON

JavaScript Object Notation,是一种轻量级的数据交换格式。它基于ECMAScript的一个子集。

JSON 格式是纯文本,易于人阅读和编写,同时也易于机器解析和生成。

  1. 语法:JSON 格式的语法与 JavaScript 语法类似,但是一些细微的差别。
  2. 类型:JSON 不支持函数类型,也不支持 undefined 类型。
  3. 大小:JSON 格式的大小受限于浏览器的本地存储空间。
  4. 性能:JSON 格式的解析速度很快,比 XML 格式的解析速度快很多。
{
  "name": "John Smith",
  "age": 30,
  "city": "New York"
}

解析 JSON

var text = '{"name": "John Smith", "age": 30, "city": "New York"}';

var obj = JSON.parse(text);

console.log(obj.name); // Output: "John Smith"
console.log(obj.age); // Output: 30
console.log(obj.city); // Output: "New York"

序列化 JSON

将 JavaScript 值转换为 JSON 字符串。

var obj = {
  "name": "John Smith",
  "age": 30,
  "city": "New York"
};

var text = JSON.stringify(obj);

console.log(text); // Output: {"name":"John Smith","age":30,"city":"New York"}

异步编程

setTimeOut

jQuery

runoob

主要的 jQuery 函数是 $() 函数(jQuery 函数)。如果您向该函数传递 DOM 对象,它会返回 jQuery 对象,带有向其添加的 jQuery 功能。

jQuery 允许您通过 CSS 选择器来选取元素。

function myFunction()
{
    var obj=document.getElementById("h01");
    obj.innerHTML="Hello jQuery";
}
onload=myFunction;

等价于jQuery的:

function myFunction()
{
    $("#h01").html("Hello jQuery");
}
$(document).ready(myFunction);