javascript基础语法

Nodejs


  • Nodejs是服务器端运行JavaScript的开源、跨平台运行环境。
  • Nodejs原始作者瑞安·达尔(Ryan Dahl),于2009年发布,使用了V8引擎,并采用事件驱动、非阻塞、异步IO模型。
  • 2010年,npm软件包管理器诞生,通过它,可以方便的发布、分享Nodejs的库和源代码。
  • Nodejs 4.0引入了ES6语言特性

安装Nodejs

直接到阿里云镜像站下载即可
https://npm.taobao.org/mirrors/node
Linux
https://npm.taobao.org/mirrors/node/latest-v10.x/node-v10.16.0-linux-x64.tar.xz
解压即可运行
windows
https://npm.taobao.org/mirrors/node/latest-v10.x/node-v10.16.0-x64.msi
10.16.x
5d1600992a29618607.jpg.jpg


开发环境

文档
Visual Studio Code

下面介绍一平台Visual Studio Code用于开发

下载 https://code.visualstudio.com/Download
支持windows、mac、Linux平台。
新版VS Code Windows版分为System 和 User两个版本,当前用户使用安装User版即可。
5d1602375d4d892773.jpg.jpg

注释

和C,Java一样,// 单行注释,/*注释*/多行注释,也可以用在语句中

// var a = 10                         // 单行注释
str = 'hello' + /*注释*/ 'world'      // 语句中注释
/*                                    // 多行注释
console.log(a)
b = 12
console.log(b)
*/

常量和变量

标识符

  • 标识符必须是字母、下划线、 符 和 数 字 , 但 必 须 是 字 母 、 下 划 线 、 符和数字,但必须是字母、下划线、 线符开头,依然是不能数字开头就行。标识符区分大小写

声明

  • var 声明一个变量
  • let 声明一个块作用域的局部变量
  • const 声明一个常量(必须声明时赋值,之后不能改)
  • js 中的变量声明和初始化是可以分开的,即先声明变量,赋值(即初始化)可以在后面.
var a
let b

console.log(a,b)

a = 10               // 之后赋值
b = 20

console.log(a,b)

const c = 100
console.log(c)

c = 200             // 常量再次赋值时,出现异常
console.log(c)
----------------------------
undefined undefined     // 有定义,当时没有初始化
10 20           
100
Error: 
f:\Markdown\workMD\node_440bf3524a7bf.tmp:15
c = 200
  ^
TypeError: Assignment to constant variable.

数据类型

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

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

// 类型转换
// 弱类型
console.log('=====string=====')
console.log(a = 3 + 'magedu', typeof(a))
console.log(a = null + 'magedu', typeof(a))
console.log(a = undefined + 'magedu', typeof(a))
console.log(a = true + 'magedu', typeof(a))
----------------------------
=====string=====
3magedu string
nullmagedu string
undefinedmagedu string
truemagedu string
// 数字
console.log('=====number=====')
console.log(a = null + 8, typeof(a))
console.log(a = undefined + 8, typeof(a)) //undefined没法转换成一个对应的数字
console.log(a = true + 8, typeof(a))
console.log(a = false + 8, typeof(a))
----------------------------
=====number=====
8 'number'
NaN 'number'
9 'number'
8 'number'
// boolean
console.log('=====bool=====')
console.log(a = null + true, typeof(a))
console.log(a = null + false, typeof(a))
console.log(a = undefined + true, typeof(a)) //undefined没法转换成一个对应的数字
console.log(a = undefined + false, typeof(a)) // NaN
console.log(a = null & true, typeof(a))
console.log(a = undefined & true, typeof(a))
----------------------------
=====bool=====
1 'number'
0 'number'
NaN 'number'
NaN 'number'
0 'number'
0 'number'
// 短路
console.log(a = null && true, typeof(a)) // 逻辑运算符,null 直接就是false短路
console.log(a = false && null, typeof(a)) // 逻辑运算符,false短路返回false
console.log(a = false && 'magedu', typeof(a)) // boolean
console.log(a = true && 'magedu', typeof(a)) // 字符串
console.log(a = true && '', typeof(a)) // 字符串
console.log(a = '' && true, typeof(a)) // 字符串
----------------------------
null 'object'
false 'boolean'
false 'boolean'
magedu string
 string
 string
// null
console.log('=====null=====')
console.log(a = null + undefined, typeof(a))
----------------------------
=====null=====
NaN 'number'

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


总结:

  • 遇到字符串,加号就是拼接字符串,所有非字符串隐式转换为字符串.
  • 如果没有字符串,加号就把所有其它类型都当做数字处理,非数字类型隐式转换,undefined特殊,因为它没有定义值,所以转换数字失败得到一个特殊值NaN.
  • 如果运算符是逻辑运算符,短路符,返回就是短路时的类型,没有隐式转换.
  • 除非你十分明确,否则不要依赖隐式转换。写代码的时候,往往为了程序的健壮,请显式转换。
转义字符
名称说明
\0Null字节,空字节
\b退格符
\f换页符
\n换行符
\r回车符
\tTab(制表符)
\v垂直制表符
\’单引号
\"双引号
\反斜杠符(\)
\xxx由从0到377最多三位八进制数XXX表示的 Latin-1 字符。例如,\251是版权符号的八进制序列
\xXX由从00和FF的两位十六进制数字XX表示的Latin-1字符。例如,\xA9是版权符号的十六进制序列
\uXXX四位十六进制数字XXXX表示的Unicode字符。例如,\u00A9是版权符号的Unicode序列。见Unicode escape sequences (Unicode 转义字符)
\u{XXXXX}Unicode代码点 (code point) 转义字符。例如,\u{2F804} 相当于Unicode转义字符\uD87E\uDC04的简写
字符串操作方法

let shool = 'university'
console.log(shool.charAt(2))  // 获取字符串,相当于索引
console.log(shool[2])         //通过索引获取字符串
console.log(shool.toUpperCase())   //大写
console.log(shool.toLocaleLowerCase())  //转小写
console.log(shool.concat('.beijin'))  //连接.拼接
console.log(shool.slice(3))    //切片
console.log(shool.slice(-3,-1))  // 切片,支持负索引
console.log(shool.slice(-3))

let url = '  www.baidu.com  '
console.log(url.split('.'))  //切割
console.log(url.substr(7,2))  //返回字符串从何处开始,取多长
console.log(url.substring(7,2))  //返回子串,从何处开始,到什么地方为止,类似于切片(起始位置是从小数开始,大数结束)
console.log(url.substring(2,7))

console.log(url.indexOf('du'))  //9
console.log(url.indexOf('du',5)) //9
console.log(url.indexOf('XX',10)) //找不到返回-1

console.log(url.trim())
console.log(url.trimRight())
console.log(url.trimLeft())

数值型 number

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

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

Number.isNaN()判断传递的值是否为 NaN

  • 内置数学对象Math Math提供了绝对值、对数指数运算、三角函数运算、最大值、最小值、随机数、开方等运算函数,提供了PI值
console.log(Math.PI)
console.log(Math.abs(-3))
console.log(Math.log2(8))
console.log(Math.random()*9+1)  // 1~10直接的取值,random是无参数函数
运算符

算数运算符

  • +, -,* ,/ ,% 运算符和python一样
console.log(Math.floor(3/2))  // 1
console.log(Math.ceil(3/2))   //2
console.log(Math.round(3/2))  //2
console.log(Math.round(1/2))  //1

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

比较运算符
  • >、<、>= 、<= 没有什么区别
  • != 、==
  • !==、===
  • == 宽松相等,进行类型转换,
  • === 严格相等,不进行类型转换
console.log(100>'200')    // false
console.log(100>10)       // true
console.log('100'>10)     // true 转换成数字后再比较
console.log('20'>'100')   // true 按照字符串比较

//  宽松相等
console.log('100' == 100)     // true
console.log('100' == '100')   // true

//严格相等
console.log(100 === '100')    //false
console.log(100 !== '100')    //true
逻辑运算符

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

位运算

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

三元运算符

条件表达式 ? 真值 : 假值,等价于if…else结构

if(条件表达式){
    真值
}
else{
    假值
}

console.log(('5'>10) ?'真':'假')  //
逗号操作符

js运行多个表达式写在一起

let a =2,b =true,c = a>10? 'true':'false'
console.log(c)
function test(){
    return 3,a +b, c=a++
}

console.log(test())   // 结果是2,逗号操作符只取到最后
console.log(c)
-----------------------------------
false
2
2

其它

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

let x = '5'
y = new Number(x)
console.log(x instanceof Number)     //false
console.log(x instanceof String)     //false

console.log(new Number(x) instanceof Number)   //true
console.log(new String(x) instanceof String)   //true

console.log(y instanceof Number)    //true
console.log(y instanceof String)    //false

console.log(typeof('1'))       //String
console.log(typeof(1))         //Number
console.log(typeof(y))         //object
  • instanceof 要求必须明确使用类型定义变量,就是对象必须是new关键字声明创建的。它可以用于继承关系的判断。
  • typeof就是返回对象的类型字符串。
delete 删除对象,属性,数组

x= 20
var y = 10
let z = 30
myobj = new Number()
myobj.h = 5
console.log(delete x)
console.log(delete y)       //canot delete if declared with var
console.log(delete z)       //canot delete if declared with let
console.log(delete  Math.PI)  //不能删除预定义属性
console.log(delete myobj.h)   //自定义属性可以删除
console.log(delete myobj)

var trees = new Array("redwood","bay","cedar","oak","maple")
for (var i =0;i < trees.length;i++)
{
    console.log(trees[i])
}
delete trees[3];  // 数组中元素被删除,但空着的位置是undefine
for (var i =0;i<trees.length;i++)
{
    console.log(trees[i])
}

in

判断属性是否在对象内,(注意,不是指内容,in不判断内容)

var trees = new Array("redwood","bay","cedar","oak","maple")

console.log(0 in trees)    //ture  0 在数组的index中
console.log("bay" in trees)  // false bay不是数组对象的属性
console.log('length' in trees)  // true  length是数组对象的长度属性

let mycar = {color : 'red',carNumber :'888888'
};
console.log('color' in mycar)

运算符优先级

运算符由高到低

运算符描述
. [] ()字段访问、数组下标、函数调用以及表达式分组
++, --, -, ~, !, delete new typeof void一元运算符、返回数据类型、对象创建、未定义值
* / %乘法、除法、取模
+ - +加法、减法、字符串连接
<<, >>移位
< , <= , > , >= , instanceof小于、小于等于、大于、大于等于、instanceof
== != === !==宽松等、不等于、严格相等、非严格相等
&按位与
^按位异或
|按位或
&&逻辑与
?:条件
=赋值、运算赋值
,多重求值,逗号表达式

逗号运算符优先级最低,比赋值语句还低

function * inc()
{
    let i = 0
    let j = 2
    while (true){
        yield i++
        if (!j--) return 100
    }
}
let x=inc()
for (let i=0;i<5;i++)
    console.log(i,x.next())
--------------------------------
0 { value: 0, done: false }
1 { value: 1, done: false }
2 { value: 2, done: false }
3 { value: 100, done: true }
4 { value: undefined, done: true }

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
站用交流系统断路器保护灵敏度校验整改及剩余电流监测试点应用站用交流系统断路器保护灵敏度校验整改及剩余电流监测试点应用站用交流系统断路器保护灵敏度校验整改及剩余电流监测试点应用站用交流系统断路器保护灵敏度校验整改及剩余电流监测试点应用站用交流系统断路器保护灵敏度校验整改及剩余电流监测试点应用站用交流系统断路器保护灵敏度校验整改及剩余电流监测试点应用站用交流系统断路器保护灵敏度校验整改及剩余电流监测试点应用站用交流系统断路器保护灵敏度校验整改及剩余电流监测试点应用站用交流系统断路器保护灵敏度校验整改及剩余电流监测试点应用站用交流系统断路器保护灵敏度校验整改及剩余电流监测试点应用站用交流系统断路器保护灵敏度校验整改及剩余电流监测试点应用站用交流系统断路器保护灵敏度校验整改及剩余电流监测试点应用站用交流系统断路器保护灵敏度校验整改及剩余电流监测试点应用站用交流系统断路器保护灵敏度校验整改及剩余电流监测试点应用站用交流系统断路器保护灵敏度校验整改及剩余电流监测试点应用站用交流系统断路器保护灵敏度校验整改及剩余电流监测试点应用站用交流系统断路器保护灵敏度校验整改及剩余电流监测试点应用站用交流系统断

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值