javascript跳跃式前进(1) - 基本概念
前言
javascript 是弱类型语言,比較接近python和perl这类,不如java和c那样严格.所以写惯了强类型语言的小伙伴看到有些另类的写法也相当正常;
有些东东不精讲..以后单独脱离出来细讲;
要点提取:
语法
- 区分大写和小写[非常重要哦,比方True和False就不是布尔值了,而是标示符]
- 和强类型基本大同小异,以强类型的命名风格基本没什么错误;推荐驼峰大写和小写
- 凝视有单行和多行凝视
- 严格模式,速度运行是最快的;可是相当多的东西给限制了
- 语句以分号结尾,支持多变量定义[逗号隔开],在语句多的时候,链式写法速度有一定的速度提升;
- 关键字和保留字不同意来做变量名[详细查表去吧..非常多]
数据类型
有这么些数据类型: undefined(没有定义) , Null(空值 – 特殊值) , Boolean(布尔值) , Number(数值) , String(字符串) , Object(对象,这个范围挺广,Array也属于当中),symbol[ES6]
- undefined : 变量未初始化的默认值
- null : 是一个特殊的对象[空的对象引用]
- boolean : 仅仅有true和false两个值,值得注意的是0和1不一定代表false和true
- Number : js没有双精度.仅仅有单精度..也不像强类型语言,依据是否有小数点且跟值来定义浮点还是整数 , 数值溢出为infinity,[NaN是一个特殊的数值]
- String : 字符串
- Object : 函数就是对象..在JS中函数在没有返回值时默认返回的一个对象
- Symbol : 这个是ES6才加入的,笼统点的说就是特殊的标示符,能够用来差别某些实例或者对象;但不等同于lisp那样的symbol(详细我如今也没深入~~~)
数据推断
typeof , instanceof , hasOwnProperty, isPrototypeOf ,isArray
- typeof : 会把大多类型归为对象
- instanceof : 用于推断一个变量是否某个对象的实例
- hasOwnProperty:是用来推断一个对象是否有你给出名称的属性或对象。只是须要注意的是,此方法无法检查该对象的原型链中是否具有该属性,该属性必须是对象本身的一个成员。
- isPrototypeOf: 是用来推断要检查其原型链的对象是否存在于指定对象实例中,是则返回true,否则返回false。
- isArray : ES5加入专门推断是否为数组的
数据转换
- Number() : 能够把同意转换成数值的内容变成数值,比方字符串”123”[前置0会忽略],空字符串为0,除能转为数字格式外的字符都会转为NaN
- paseInt() : 转换字符串为整数,若是”111ee”仅仅会得到111,逐个字符遍历的[若是非数字开头则不会遍历,遇到小数点也会停止]..
- parseFloat() : 转换字符串为浮点数,与上面那个相似
- Boolean() : 转为布尔值
- String() : 把值转为字符串,对象转换会调用ValueOf(),与toString()效果基本一致
操作符
- 一元操作符 : 包含加减乘除,前置减减加加和后置减减加加[前置先赋值生效再运行,后置运行后再运算]
- 按位操作符 : 跟强类型语言一致,包含按位非(~)[值的反值,真假调换],按位与(&)[同为真才为真,其它为假],按位或(|)[存真即为真,同假才假]。按位异或(^)[同样为假,不同为真]
- 左移和右移: 左移为乘以2的次幂,右移除以2的次幂..无符号右移[正数不变,符号会由于左边填充0变成一个相当大的正值]
- 逻辑运算符 : 逻辑与(&&)[同为真才为真,其它为假] ,逻辑或(||)[有真即为真,同假才为假]
- 相等操作符 : = [赋值,有复合操作符(能够配合加减乘除求余等运算符 ,比如 a %= 3 , b *= 2;)] , == [若同意转换成比較的类型,自己主动转换匹配的类型比較] , === [强等,不转换比較,同一时候比較类型和值]
- 条件运算符[三目运算符] : (expression)?
true : false ; 表达式真假来获取相应的返回值
流控制语句
流控制语句,,大多编程语言都是大同小异~~~~
- if语句
//推荐带花括号,且花括号左边紧贴表达式,能够减少语法解析识别为错误的问题[解析器会自己主动给一些变量或者语句加入分号]
if(conditions) {
...
}else if{
...
}else{
...
}
- do-while语句
//先运行do里面的逻辑,再运行推断表达式来确定下一步是否运行
do{
statement;
}while(expression)
- while语句
//适合不知道应该循环多少次的,符合条件就无限运行,带花括号是一个好习惯
while(expression){
statement;
}
- for语句
//适合有限的循环
for(initialization ; expression ; post-loop-expression){
statement;
}
- for-in语句
//[ES5]适合来枚举对象的属性,遇到值为null或者undefined则会抛出错误
for(proerty in expression){
statement;
}
- forEach语句
//[ES5] 适合遍历数组,缺点:不能用break跳出循环和用return语句
//传统是用for来遍历数组...见仁见智哈
var arr = [1,2,3,4];
arr.forEach(function(value){console.log(value)})
//结果集: 1,2,3,4,undefined
- for-of语句
//[ES6]这货的出现,更加方便了数组的遍历...
//它避免了for-in的全部缺陷;
//与forEach()不一样,它支持break,continue和return。
var arr = [1,2,3,4];
for(var i of arr){
console.log(i)
}
//结果集: 1,2,3,4,undefined
- label语句
//跟goto好相似....一般配合break和continue语句;在多重嵌套循环的时候,能够满足条件直接跳出整个循环(标签指定的位置)
label : for(initialization ; expression ; post-loop-expression){
statement;
}
- break和continue语句
//break是跳出循环(中断运行)
//continue是跳出这次循环,进入下一次循环(仅仅是跳过符合条件的那一次循环,会继续运行到结束)
- switch语句
//语法和高级编程语言大同小异,适合多重推断(当然不嫌弃麻烦能够用if..elseif...else)
//小提示.若不是要运行多个表达式..记得每一个相应推断条件后必须break结束;否则会依次往下寻找相应的值,其上的全部非包含break的都会运行;
switch(expression){
case value1 : statement; break;
case value2 : statement; break;
case value3 : statement; break;
...
default:statement;break;
}
函数
- 最简单的声明函数
/*
与大多编程语言一样..函数运行到return语句就结束该函数了..无论后面还有木有表达式;
由于JS是弱类型语言.. 在ES6前,有些东西不得不模拟,比方匿名函数,闭包,"花样式"继承
有点值得一提的是,,JS木有重载(当前,以后就不晓得会不会添加)
这里不多说..到时候在新文章拖出来细细揣摩
*/
function say(){
console.log("Hello world!");
}
say();
function say1(args1,args2){
console.log("Hello world!");
}
say1();
总结
就我个人而言..原生JS我是折腾的比較痛苦的…花样太多;继续磨练~