basic
在这里,不想直接照抄某个网站的文章或者观点,只是标注一些注意点
对大小写敏感
Comments
// /* */
tips: /* 但是, 你不能, /* 嵌套注释 */ 语法错误 */
Declarations
var
let 声明块范围局部变量(block scope local variable),可选择将其初始化为一个值。
const 声明一个只读(read-only)的有名字的常量。
声明变量(Declaring variables)
- 使用关键词 var。
- 直接赋值。
- 使用关键词let。
tips:时用来声明语句块代码段的局部变量(block scope local variable)。
对变量求值(Evaluating variables)
用var 和let声明为赋初值的变量,只会被设定为undefined.
tips - undefined值在布尔类型环境中会被当作false undefiend --> false
- 数值类型环境中undefined值会被转换为NaN undefiend --> NaN(Not a Number)
- 空值 null 在数值类型环境中会被当作0来对待 null --> 0
var a = undefined;
var a ;
变量作用域
if(true){
var x= 5;
}
console.log(x);//5
if (true) {
let y = 5;
}
console.log(y); // ReferenceError: y is not defined
tips:ECMAScript 6 之前的JavaScript没有 语句块 作用域;相反,语句块中声明的变量将成为语句块所在代码段的局部变量。不是语句块作用域,声明了 x 的那个函数(或全局范围)。
声明提升
x = undefined;
console.log(x === undefined);
var x =3;
var myvar = "my value";
(function(){
console.log(myvar);
var myvar = "local value";
})();
var myvar1 = "my value";
(function(){
var myvar1 ;
console.log(myvar1);
var myvar1 = "local value";
})();
tips:变量声明提升了,但是其值赋予undefined.
全局变量
其对象是window
window.variable
parent.phoneNumber
Constants..常量
const prefix="404";
常量必须被初始化为某个值。
tips:不能用于变量或函数名相同的名字来命名常量.
数据结构和类型
识别7种值
- 6种是 原型的数据类型
Boolean null undefined ,Number , String, Symbol
typeof关键字,查看其类型.
typeof Boolean; //function
typeof null; // object
typeof NULL; // undefiend
typeof undefiend; //undefiend
typeof Number; //function
typeof String;//function
typeof Symbol;//function
typeof Object;//function
通过typeof可以看出,Boolean、Number、String、Symbol的类型是function,null是一个关键字,用于表示空值的对象。NULL则是表示一个变量,值为undefined。Symbol是在 ECMAScript 6 中新添加的类型,一种数据类型,它的实例是唯一且不可改变的。
- 以及Object对象
自动转换
tips:"37" - 7 ;//30,自动转换成数字
"37"+7;//377,自动转换成字符串
converting strings to numbers
parseInt()和parseFloat();
tips:将数字字符串转换成数字的方法parseInt(),parseFloat(),
还有单目加发运算符
'1.1'+'1.1';//1.1.1.1
(+'1.1')+(+'1.1');//2.2
字面值(Literals)
字面值是由语法表达式定义的常量;或,通过由一定字辞组成的语词表达式定义的常量
在JavaScript中,你可以使用各种字面值。这些字面值是脚本中按字面意思给出的固定的值,而不是变量。(译注:字面值是常量,其值是固定的,而且在程序脚本运行中不可更改 ).
字面值的类型如下:
- 数组字面值(Array literals)
- 布尔字面值(Boolean literals)
- 浮点数字面值(Floating-point literals)
- 整数(Intergers)
- 对象字面值(Object literals)
- RegExp literals
- 字符串字面值(String literals)
数组字面值(Array literals)
数组字面值是一个封闭在方括号对([])中的包含有零个或多个表达式的列表,其中每个表达式代表数组的一个元素。
tips:数组字面值中的多余逗号
若你在同一行中连写两个逗号(,),数组中就会产生一个没被指定的元素,其初始值是undefined(除了最后逗号去除的情况)。
var fish = ["Lion", , "Angel"];
var fish = ["Lion", undefined , "Angel"];//等同
var fish = [ , , 'Alison', 'Gavin', ]
var fish = [ undefiend, undefiend, 'Alison', 'Gavin' ]//最后的逗号会去掉
而且他俩的长度一样,都是.length = 4
var coffees = ['a', , 'b', , , ];
var coffees = ['a' , undefined, 'b' , undefined, undefiend ];
console.log(coffees.length);//5
浮点数字面值(Floating-point literals)
语法:[(+|-)][digits][.digits][(E|e)[(+|-)]digits]
对象字面值(Object literals)
对象字面值是封闭在花括号对({})中的一个对象的零个或多个"属性名-值"对的(元素)列表。
var sales = "tomacat";
function carType(name){
return (name === 'hone')? name : "sorry";
};
var car ={myCar: "staturn", getCar: carType('hone'), special: sales};
console.log(car.myCar);//staturn
console.log(car.getCar);//hone
console.log(car.special); // tomacat
tips:
- 可以使用数字或字符串字面值作为属性名,或者在另一个字面内值嵌套一个字面值。
var carr = {mycara: {a: 'Saab', b: 'Jeep'}, 7: 'Mazda'};
- 对象属性名可以是任意字符串,包括空串。如果对象属性名字不是合法的javascript标识符,它必须用""包裹。属性的名字不合法,那么便不能用.访问属性值,而是通过类数组标记("[]")访问和赋值。
这里说的是,不是合法字符串,都需要通过类数组标记来访问,不能通过' . 属性'来访问。
var unus = {
"": "an empty String",
"!": "Bang"
}
//console.log(unus."");//SyntaxError: missing name after . operator
console.log(unus[""]);
//console.log(unus.!);//SyntaxError: missing name after . operator
console.log(unus["!"]);
var foo ={a : 'alpha', 2: 'two'};
console.log(foo.a); //alpha
console.log(foo[2]);//two
console.log(foo.a);
//console.log(foo.2);//SyntaxError: missing ) after argument list
console.log(foo[a]);//undefined,并不是Error: a is not defined
console.log(foo[2]);
console.log(foo["a"]);
console.log(foo["2"]);
RegExp字面值
一个正则表达式是字符被斜线围成的表达式。var foo =/asd+as/
字符串字面值(String literals)
字符串字面值可以包含有零个或多个字符,由双引号(")对或单引号(‘)对包围。
tips:字符串字面值后自动转换为一个临时字符串对象,就可以调用对象的方法,然后废弃掉那个临时的字符串变量。
参考文献:https://developer.mozilla.org/zh-CN/
PS: 若你觉得可以、还行、过得去、甚至不太差的话,可以“关注”一下,就此谢过!