javascript
基础知识
变量
声明未赋值的变量未 undefined
; 省略var
的变量是隐式全局变量。 在函数外部声明的var
变量是显示全局变量。
函数
函数的声明样式:
function fun_name (param1, param2, param3, ...) {
// do some thing here
}
由于函数的声明中对于参数的类型并没有限制,因此在函数内部,函数设计者需要对此进行判定,使得函数更具有健壮性。
匿名函数表达式
形式:
function (param1, param2, param3, ...) {
// do some thing
}
匿名函数表达式为一个表达式,因此可以直接给变量赋值,或者作为一个变量参数使用。
对象
对象本质上是没有名称的,变量存在的意义是为了调用没有名称的对象。
<b> java 中对象可以看成是类的实例化结果,而在JavaScript中,并没有类的概念,而对象中存储的是名称和值配对的集合,因此js中对象可以看成是属性的集合。 </b>
字面量表达式
字面量表达式由{}
裹起来,内部由属性名和属性名称。
{key:value, key:value, key:value, ...}
访问方式:
- 点运算符,后面可以直接写属性名,不用加
""
。 - 括号方式,使用
[]
进行访问,但是需要加""
. 对于对象中不存的的属性值进行赋值,则会创建新的属性。
new 运算符
JavaScript中没有类的概念,因此,var obj = new Object();
中new
之后的并不是类,而是构造函数。
数据类型与运算符
运算符
- 基本运算符
类型 | 示例1 | 示例2 |
---|---|---|
自加 | += | a += 1 |
加 | + | |
减 | - | |
乘 | * | |
除 | / | |
模 | % | |
自增 | ++ | |
自减 | -- | |
存在 | in | |
类型判断 | instanceof | |
逻辑非 | ! | |
逻辑与 | && | |
逻辑或 | || |
- 其他运算符
- 三目运算符: 条件表达式?表达式1:表达式2;
- typeof运算符: 其结果为
'string' 'number' 'boolean' 'undefined' 'object' 'function' 'xml'
- new: 生成对象
- delete: 删除对象的属性
- .运算符与[]运算符:访问属性
原始值 primitive value Y 原始类型 primitive type 基本数据类型 N
简单数据类型
基于类与基于原型
对于Java而言,除内建类型之外的都是用户自定义类型,用户自定义类型分为类和接口,开发者需要书写该类型的定义语句来定义使用此类型。这种编程风格称为基于类的语言风格。
JavaScript的语言规范中,不存在定义数据类型的语句,不需要使用特别的语句就能定义一个对象的属性和方法,并确定了一个对象。所谓类型只是行为方式上的共性。由于每个对象都具有相同的行为方式,所以可以使用原型对象。此称为基于原型的风格。
常用内置对象
数组 Array
字面量表达式:
var list = [param1, param2, param3, ...]
可以装填不同类型的数据
字符串 String
JavaScript中没有字符的概念,使用长度为1的字符串来表示字符。 使用双引号和单引号,两者没有区别。可以灵活使用单双引号类消除或者减少使用转义字符。 String 为不可变类型,对其运算会生成新的string。
var s1 = '123';
var s2 = s1;
s1 += "234";
具有大小比较的特性。
- === 比较的时候不会对数据类型进行变换。
- == 会进行数据类型的转换。
-
- <
长度 str.lenght
字符 str.charAt(index)
字符串值和字符对象字面值
var str = new String('abc');
上面为一个字符串对象,一般来说。字符串对象与字符串值之间并没有明显的 区别,但是在相等时就有一定的区分了。
var str1 = new String('abc');
var str2 = new String('abc');
var b1 = (str1 == str2); // false
var b2 = (str2 === str2); // false
var b3 = (str1+"" == str2+""); // true String -> 字符串值
var b4 = (str1+"" === str2+""); // true String -> 字符串值
ps:
var str1 = new String('123');
var str2 = String('123');
var str3 = '123';
console.log(typeof str1); // object
console.log(typeof str2); // string
console.log(typeof str3); // string
ps:
function | 说明 |
---|---|
String() | 构造函数 |
new String() | 生成string实例 |
fromCharCode() | 将参数生成string类型的值 |
charAt(index) | 从0开始,越界返回空字符串 |
charCodeAt(index) | |
concat(str1, str2, ...) | 拼接 |
constructor | |
... | ... |
slice(start, end) | |
split(separator, limit) | |
substr(start, end) | |
trim() | |
trimLeft() | |
trimRight() | |
length |
数值
一种数值类型,64位的浮点小数。 == double
-
运算
a/0
将得到一个特殊的数值。 -
Math。 一个特殊的对象
-
Number 另一个特殊的对象
-
常用函数 |函数或者构造函数|说明| |-----|-----| |Number(value)|将value变为数值类型| |new Number(value)|生成Number对象| |length|值为1| |MAX_VALUE| 64为浮点数的最大数| |MIN_VALUE| 64位浮点数的最小数| |NaN|not a number| |NEGTIVE_INFINITY| 负无穷大| |POSITIVE_INFINITY| 正无穷大|
小数运算没有相等的说法。
布尔值
true
or false
null值
null
属于字面量,但是使用 typeof
运算符得到的结果为object
。
undefined
未定义的变量,是一种预定义的全局变量,对其进行typeof
运算得到的是undefined
。
数据类型转换
-
字符串变为数值
- 通常使用
Number(), parseInt(), parseFloat(),
等函数。其中Number()
最为严格,如下:
var v1 = Number("100xp"); var v2 = parseInt("100px"); var v3 = parseFloat("100px");
- 通过隐式转换 使用运算符,与
Number()
的效果一样。
var s = '100'; // 字符串 var s2 = s + ''; // 数值
- 隐式转换
var s = 100; // 数值 var s2 = s + ''; // 字符串
- 通常使用
-
将数值转为字符串
String()
或者.toString()
在字符串和数值之间进行转换时要注意的事项
转换的对象 | 数据类型转换 | 结果 |
---|---|---|
无法被转为数值的字符串 | 数值 | NaN |
空字符串 | 数值 | 0 |
数值NaN | 字符串 | “NaN” |
- 转为布尔型 将会转为
false
的类型:- 数值0
- 数值NaN
- null值
- undefined值
- 空字符串
运行时性能分析
对于客户端JavaScript代码,其运行受到如下因素的影响;
- javascript 代码的执行时间
- dom的渲染时间
- 网络响应时间
语句、表达式和运算符
-
保留字
-
标识符
-
字面量 包括:数值、字符串值、布尔值、null值、object、数列、函数、正则表达式
-
语句
-
代码块
-
变量声明语句
var foo = "new";
-
函数声明语句
function fun_name (param1, param2, ...){ // do some here }
-
if-else 语句
if(condifion){ // do some } else { // do another }
-
swith-case 语句 使用
===
进行比较数据,一定要加break
语句。 -
循环语句
// while while(condition){ // do some thing } // do while do // do some thing while(condition) // for for(初始化表达式; 条件表达式; 更新表达式){ // do some } // for in for (表达式 in 对象表达式){ // do some // 将属性名赋值给变量 } // for each for each (表达式 in 对象表达式){ // do some // 将属性值赋值给变量 }
// for each 与 for in var list = [12,23,45,6]; for (const key in list) { if (list.hasOwnProperty(key)) { const element = list[key]; console.log(key+":"+element); } } console.log("-------------------------") list.forEach(element => { console.log(element) });
-
break语句
-
continue语句
-
try-catch-finally语句