一、变量
-
整型
包括浮点数和整数,都是64位。
NaN表示not a number,当出现0/0时就会出现这个结果。
浮点数分符号位、小数位、整数位。
Infinity,-Infinity都表示无穷,Infinity-1仍是Infinity,Infinity-Infinity是NaN。 -
字符串
字符串可用“abc”,‘abc’ 来表示,双引号与单引号没多大区别;
字符串的运算只有+,例如,”a"+‘b’=“ab”
但是,如果在字符串中使用"abc 100 / 2 “ , 此 时 就 会 计 算 {100/2}“,此时就会计算 100/2“,此时就会计算{}内的值,然后把值转换从字符串输出 -
typeof运算符
会返回一个字符串,用来表示typeof 后面数据的类型;
例如,typeof 2.2//number “x” /string -
Boolean类型
一般是true或false,特别的NaN == NaN ,结果为false -
空类型
null、undefined 是差不多的两个东西
null 指代一个空的object,转化成整型是0,!null=true
undefined 指代没有定义的原始值 ,比如var a;转成数值是NaN
注意:只有当null == undefined 时,才会得出true
null==0 是false -
自动类型转换
一般的JavaScript会进行自动类型转换,比如
8*null = 0
”5“-1 = 4 字符串转数字
”5“+1=51 数字转字符串
“five” * 8 = NaN 因为five不能转成一个确定的值,所以five=NaN
规避自动类型转换的两个运算符!=== 与 ===
当你不想使用自动类型转换时,就用null===undefined 得到false
或者0!==false 得到true; -
条件运算符返回值
1||“51” 返回值是1
0||0||123 返回值是123
原理是,自动类型转换,直到把某个类型转换成true,然后返回它的值,注意,在条件表达式中0、NaN、“”都是false -
Let 与 Var
二者作用范围不同,Let是{ }作用域,Var 是全局作用;
let相当于是指针,const就是固定的指针,与某个常数绑定; -
JavaScript环境
在某一个给定时间内,存在的Bindings和值,它们的集合就叫做环境。当程序开始执行时,环境不为空,因为JavaScript永远有bindings在语言std中,通常这些bindings会与电脑的操作系统相关;
比如,在浏览器里面有读键盘、鼠标的输入函数。
二、函数
函数定义
//其实就是一个常规的 binding,用关键词function创建一个函数
const square = function(x){
return x*x;
};
function square2(x)
{
return x*x;
};
每种类型的binding 都有一个绑定范围,即生存空间;
比如,在function以外的都是全局作用域——单个program,也把全局作用域叫global;
特殊的函数定义写法:
用=>代替关键词function;()内 是参数
只含一个参数时,可写成base=>{};
不含参数要写成() => { }
const power=(base,exponent) =>
{
let result=0;
for(let count =0;count < exponent;count++)
{
result *=base;
}
return result;
};
可选参数:
例如,func(a,b)
若调用(1,2,3),那么只会take前两个
若调用(1),那么b就成了undefined 传入函数
或者,定义func(a,b=2)
若调用(1),那么b就成了2被默认传入func,即使没写
返回值为函数的情形:
请注意,函数名在JavaScript里面也是值
function abs(x)
{
return name => name + x;
}
let a=abs(2);
a(2);
a(2)的值实际就是调用了返回的函数,即2+2 =4