分享一些收集过来的 AI 工具(网站),持续更新
2023年02月13日 11:09
分享一些收集过来的 AI 工具(网站),持续更新
javaScript MDN 阅读笔记
文档地址:https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Guide/Grammar_and_types
记录用时:2024/7/2 - 2024/7/4
;
)
//
),多行注释(/* */
),不允许嵌套。
var
(声明一个变量) 、let
(声明一个块作用域的局部变量) 、const
(声明一个块作用域的只读常量,不可更改)。什么是块作用域?答:块由一对大括号({}
)界定,并包含零个或多个语句和声明。语法是{ StatementList }
。
_
)或者美元符号($
)开头,支持 Unicode 字符集。例如:Number_hits
、temp99
、$credit 和 _name
、😊
、汉字
。var
。例如 var x = 42
。这个语法可以用来声明局部变量和全局变量。 x = 42
。在函数外使用这种形式赋值,会产生一个全局变量。不推荐。let
。例如 let y = 13
。这个语法可以用来声明块作用域的局部变量。let { bar } = foo
。即创建一个名为 bar 的变量,并将 foo 对象中属性名与之相同的属性的值赋给它。var
或 let
语句声明的变量,如果没有赋初始值,则其值为 undefined
。undefined
值在布尔类型环境中会被当作 false
,数值类型环境(即数学运算)中 undefined
值会被转换为 NaN
(表示未定义或不可表示的值)。null
变量求值时,空值 null
在数值类型环境中会被当作 0
来对待,而布尔类型环境中会被当作 false
。var
声明的变量将成为语句块所在函数(或全局作用域)的局部变量,类似于全局变量,不等同于全局变量。let
声明的变量将成为语句块内(或全局作用域)的局部变量,类似于局部变量,不等同于局部变量,例如在全局空间下使用 let
声明了一个变量,那么这个变量就如同“全局变量”。undefined
,否则保持使用过程中所赋予的值,即使是最后声明时赋予了其它值。var
声明变量来说,遵循上述规则。let
和 const
来说,虽然同样会被提升变量到代码块的顶部但是不会被赋予初始值(相当于 JavaScript 在执行时提前预留出了声明变量的空间,但没有真的声明变量。与 var
不同,var
相当于直接在代码顶部提前声明了变量),且变量将从代码块一开始的时候就处在一个“暂时性死区”,直至变量被声明为止,所以在使用 let
或 const
声明变量时(注意,直接赋值会被当做全局变量,不推荐的做法),不能提前访问变量。故若使用 let
或 const
声明变量,let
或 const
则必须处于代码块的最前面。window
,所以可以用形如 window.variable
的语法来设置和访问全局变量。因此,可以通过指定 window
或 frame
的名字,在当前 window
或 frame
访问另一个 window
或 frame
中声明的全局变量,如:在文档里声明一个叫 phoneNumber
的全局变量,那么就可以在子框架里使用 parent.phoneNumber
的方式来引用它。
+
)时,JavaScript 会把数字转换成字符串,其余情况不会。parseFloat()
,parseInt()
。+
号,一元加(+
)运算符不会对数值产生任何影响,但会尝试将其转换为数字,例如:(+"1.1") + (+"1.1") = 2.2 // 注意:加入括号为清楚起见,不是必需的。
let num = 42; let str = "Hello, world!"; let obj = { key: "value" }; let arr = [1, 2, 3];
[]
) 中的包含有零个或多个表达式的列表,其中每个表达式代表数组的一个元素。例如:var coffees = ["French Roast", "Colombian", "Kona"];
,
),数组中就会产生一个没有被指定的元素,其初始值是 undefined
,如果是在元素列表的尾部添加了一个逗号,它将会被忽略。显式地将缺失的元素声明为 undefined
,将大大提高你的代码的清晰度和可维护性。true
和 false
。true
和 false
就是原始值,它们直接表示逻辑上的真和假。然而,JavaScript 也提供了将原始布尔值包装成对象的能力,这就是所谓的“布尔对象”。例如:let boolObj = new Boolean(true); // 布尔对象
-
),一元加(+
)。0o
或 0O
开头。e
”或“E
”开头,后面跟着一个整数,可以有正负号(即前缀“+
”或“-
”)。浮点数字面量至少有一位数字,而且必须带小数点或者“e
”(大写“E
”也可)。语法是:[(+|-)][digits][.digits][(E|e)[(+|-)]digits]
,举例:3.1415926、.123456789、3.1E+12(3.1 × 10^12)、.1e-23(0.1×10^-23)
。{}
)中的一个对象的零个或多个“属性名—值”对的(元素)列表。{
)会被认为是一个语句块的起始符号。对象属性名字可以是任意字符串,包括空串。如果对象属性名字不是合法的 javascript 标识符,它必须用引号包裹,且不能用点(.
)访问属性值,而是使用方括号表示法([]
)来访问。举例:
var car = { manyCars: { a: "Saab", b: "Jeep" }, 7: "Mazda" , '': '空字符串', '!': '砰!'};
console.log(car.manyCars.b); // Jeep
console.log(car[7]); // Mazda
console.log(car[“”]); // 空字符串
console.log(car[”!“]); // 砰!
var obj = {
// __proto__
__proto__: theProtoObj,
// Shorthand for ‘handler: handler’
handler,
// Methods
toString() {
// Super calls
return "d " + super.toString();
},
// Computed (dynamic) property names
["prop_" + (() => 42)()]: 42,
};
__proto__
属性:__proto__
是一个特殊的属性,用于设置对象的原型。在这里,obj
的原型被设置为 theProtoObj
。这意味着 obj
将继承 theProtoObj
中的所有可枚举和可配置的属性和方法,即可以直接通过 obj
访问 theProtoObj
中的内容。直接操作 __proto__
并不推荐。handler
这里使用了属性名简写语法,它允许省略等号后面的变量名,这等同于 handler: handler
,但更简洁。toString()
方法是自定义的,它覆盖了默认的 toString()
方法。调用 obj.toString()
时,就执行这个自定义的 toString()
方法。["prop_" + (() => 42)()]
这里定义了一个属性,其名字是一个表达式的结果。这个表达式是一个立即执行的函数表达式(IIFE),返回值为 42。因此,这个属性的名字就是 "prop_42",并且它的值也是 42。var foo = { a: "alpha", 2: "two" };
console.log(foo.a); // alpha
console.log(foo[2]); // two
//console.log(foo.2); // SyntaxError: missing ) after argument list
//console.log(foo[a]); // ReferenceError: a is not defined
console.log(foo["a"]); // alpha
console.log(foo["2"]); // two
/
”围成的表达式。例如:var re = /ab+c/;
console.log("John's cat".length);
`
)里使用变量,格式: `${变量名}`
,例如: `Hello ${name}, how are you ${time}?`;
,在反引号里面的字符串内容可以换行。\
可以转义上面的特殊字符。例如:var quote = "He read \"The Cremation of Sam McGee\" by R.W. Service.";
\
也可以当作换行使用,当一个语句过长时使用反斜线 \
分开换行写。
基础和注释截图没截好。