js基本语法

Node.js
Node.js是服务器端运行JavaScrip的开源、跨平台运行环境
node.js原始作者瑞安达尔(Ryan Dahi),于2009年发布,使用了V8引擎,并采用事件驱动、非阻塞、异步IO模型
2010年,npm软件包管理器诞生,通过它,可以方便的发布、分享Nodejs的库和源代码。
Nodejs4.0引入了ES6的语言特性。
我们学习Js,就让它跑在最新版的Nodejs上,为了调试方便,也为了使用最新的ES特性。

开发文档
搜索MDN,Mozilla Developer Network,提供非常完善HTML、CSS、JS等的技术资料
https://developer.mozilla.org/zh-CN/docs/Web/JavaScript指南https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Guide

JS是动态语言,弱类型语言

注释
// 单行注释
/**/ 多行注释,也可以用在语句中

常量和变量
标识符必须是字母、下划线、美元符号$和数字,不能以数字开头
标识符区分大小写(Js对大小写敏感)

声明
var 声明一个变量
let 声明一个块作用域中的局部变量
const 声明一个常量

Js中的变量声明和初始化是可以分开的

数据类型

名称说明
number数值型,包括整型和浮点型
boolean布尔型true和false
string字符串
null只有一个值null
undefined变量声明未赋值的;对象未定义的属性
symbolES6 新引入类型
object类型是以上类型的符合类型,是容器

JS是动态语言,弱类型语言
虽然先声明了变量,但是变量可以重新赋值任何类型

console.log("-------string--------")
console.log(a = 3 + 'hello word',typeof a)
console.log(a = null + 'hello', typeof a)
console.log(a = undefined + 'hello',typeof a)
console.log(a = true + 'hello',typeof a)

//数字
console.log(a = null + 8,typeof a)
console.log(a = undefined + 8,typeof a)
console.log(a = true + 8,typeof a)
console.log(a = false + 8,typeof a)


console.log('------------------')
console.log(a = null + true,typeof a)
console.log(a = null + false,typeof a)
console.log(a = undefined + true, typeof a)
console.log(a = undefined + false,typeof a)
console.log(a = null & true,typeof a)
console.log(a = undefined & true,typeof a)

//短路
console.log(a = null && true,typeof a)
console.log(a = false && null,typeof a)
console.log(a = false && 'abc',typeof a)
console.log(a = true && 'abc',typeof a)
console.log(a = true && '',typeof a)

//null
console.log(a = null + undefined,typeof a)

弱类型,不需要强制类型转换,会隐式类型转换。
NaN,即Not a Number,转换数字失败。它和任何值都不等,和自己也不等,只能使用Number.isNaN(NaN)

总结:遇到字符串,加号就是拼接字符串,所有非字符串隐式转换为字符串。
如果没有字符串,加号吧其他所有类型都当数字处理,非数字类型隐式转换为数字。undefined特殊,因为它都没有定义值,所以转换数字是失败得到一个特殊值NaN。
有定义值,所以转换数字失败得到一个特殊值NaN。
如果运算符是逻辑运算符,短路符,返回就是短路时的类型。没有隐式转换。
除非你十分明确,否则不要依赖隐式转换,写代码的时候,往往为了程序的健壮,请显示转换。

字符串
将一个值使用单引号或者双引号引用起来就是字符串
ES6提供了反引号定义一个字符串,可以支持多行,好支持插值

let a = 'abc'
let b = 'aaaaaaaaa'
let c = `line1
 line2
line3
`
//多行
console.log(c)

// 字符串插值,要求在反引号字符串中。
let name='tom',age=19
console.log(`my name is ${name} i am ${age}`)

转义字符

名称说明
\0Null字节,空字符
\b退格符
\f换页符
\n换行符
\r回车符
\tTab(制表符)
\v垂直制表符
单引号
"双引号
|转义字符
\XXX由从0到377最多三位八进制数表示的Latin-1字符.
\xXX由从00到FF的两位十六进制数字XX表示的latin-1字符.
\uXXXX由四位十六进制数字XXXX表示的Unicode字符,例如,\u00A9是版权符号的Unicode序列,见Unicode escape sequences(Unicode 转义字符)
\u{XXXXX}Unicode代码点(code point)转义字符.例如,\u{2F804}相当于Unicode转义字符\uDE\uDC04的简写

字符串操作

console.log(a.charAt(0)) //索引
console.log(a[1])   //索引
console.log(a.toUpperCase()) //大写
console.log(a.concat('yes')) //连接字符串
console.log(a.slice(2))  //切片  支持负索引
console.log(a.slice(2,5))
console.log(a.slice(-2,-1))
console.log(a.slice(-2))

let url = 'www.baidu.com' 
console.log(url.split('.'))  //切割字符串
console.log(url.substr(7,2))  //返回字符串从何处开始,取多长
console.log(url.substring(2,8))  //返回子串,从何处开始,都哪里为止

let s = 'baidu.dum'
console.log(s.indexOf('du'))
console.log(s.indexOf('du',4))
console.log(s.replace('.dum','.com'))  //替换
s = '\tbaidu com \r\n'
console.log(s.trim()) //去掉两端的空白字符串

数值型number
在JS中,数据均为双精度浮点型范围只能在-(253-1)和253-1之间,整型也不例外
数字类型还有三种符号值:+Infinity(正无穷)、-Infinity(负无穷)和 NaN (not-a-number非数字)。
二进制0b0010、0B110。
八进制0755。注意0855,将被认作十进制,因为8不在八进制中。ES6中最好使用0o前缀表示八进制。 十六进制0xAA、0Xff。
指数表示1E3(1000),2e-2(0.02)

常见属性

var biggestNum = Number.MAX_VALUE;
var smallestNum = Number.MIN_VALUE; 
var infiniteNum = Number.POSITIVE_INFINITY; 
var negInfiniteNum = Number.NEGATIVE_INFINITY; 
var notANum = Number.NaN;

数字的方法

方法描述
Number.parseFloat()把字符串参数解析成浮点数,和全局方法 parseFloat() 作用一致
Number.parseInt()把字符串解析成特定基数对应的整型数字,和全局方法 parseInt() 作用一致
Number.isFinite()判断传递的值是否为有限数字
Number.isInteger()判断传递的值是否为整数
Number.isNaN()判断传递的值是否为 NaN。Nan唯一判断方式

内建数学对象Math
Math提供了绝对值、对数指数运算、三角函数运算、最大值、最小值、随机数、开方等运算函数,提供pi值

console.log(Math.PI) 
console.log(Math.abs(-1)) 
console.log(Math.log2(16)) 
console.log(Math.sqrt(2)) 
console.log(Math.random()) // (0, 1)

运算符

算术运算符
加粗样式+ - * / %等运算符和Python一样

console.log(parseInt(1/2)) //0 取整数部分
console.log(Math.floor(-3/2))  // 向下取整

console.log(Math.ceil(3/2)) // 2 向上取整
console.log(Math.round(5/2))  //四舍五入 

++ 和 –
单目运算符,代表变量自增、自减
i++先用i,用完之后i再自增1
++i先自增,再使用

比较运算符

>、<、>=、<= 没有什么区别 
!=、== !==、===
 
== 宽松相等,进行类型转换, 
=== 严格相等,不进行类型转换

Js不同类型之间作比较或宽松比较时,会引起隐式转换,而且隐式转换的规则很复杂不好把控
如果不知道类型是否一致,但是就是要求一定要相等,那么请使用=和!
建议比较的时候,一律使用=和!

逻辑运算符
&& || ! 与 或 非
这些运算符和其他高级语言都一样,支持短路

位运算
& | ^ ~ << >> 位与、位或、异或、取反、左移、右移,和Python意义一样

三元运算符

条件表达式?真值:假值
 
等价于简单的if...else结构
 
if (条件表达式) {
    真值 
} else {    
    假值
}

console.log(('3' > 30)?'真':'假')

逗号操作符
JS运行多个表达式写在一起

let a = 4+5,b = true,c = a > 20?'t':'f'
console.log(a) 
console.log(c)
 
function test() {
    return 3, a + b, c = a++ 
}
 
console.log(test()) // 9
console.log(c) // 9

其他

名称说明
instanceof判断是否属于指定类型
typeof返回类型字符串
deletedelete操作符, 删除一个对象(an object)或一个对象的属性(an object’s property)或者一个数 组中某一个键值(an element at a specified index in an array)。
in如果指定的属性再对象内,则返回true

instanof 要求必须明确使用类型定义变量,就是对象必须是new关键字声明创建的.它可以用于继承关系的判断.
typeof就是返回对象的类型字符串.
delete删除对象 属性 数组元素 数组中元素被删除,空着的位置是undefined

in判断属性是否在对象内 数组是索引 对象是属性(key)

运算符优先级
运算符由高到低,顺序如下

.[ ]
() new
! ~ - + ++ – typeof void delete
* / %
+ -
<< >> >>>
< <=     >  >=   in   instanceof
==    !=   ===  !==
&
^
|
&&
||
?:
=  +=  -=  *=  /=  %=  <<=  >>= >>>=  &=  ^=  |=
,

逗号运算符优先级最低,必赋值语句还低
记不住,就使用括号

表达式
基本表达式
解析式也和Python的相似,但在ES6中非标准不推荐使用
生成器推荐使用生成器函数,ES6开始支持

function * inc() {
    let i = 0, j = 7
    while (true) {
        yield i++        
        if (!j--) return 100    
    } 
}
 
let gen = inc() 
for (let i=0;i<10;i++)
    console.log(gen.next())

每次调用next() 方法返回一个对象,这个对象包含两个属性:value 和 done,value 属性表示本次 yield 表达式的 返回值,done 属性为布尔类型。done是false表示后续还有yield语句执行,如果执行完成或者return后,done为 true。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值