声明格式:var name = value;
JavaScript在设计之初,为了方便初学者学习,并不强制要求用var
声明变量。这个设计错误带来了严重的后果:如果一个变量没有通过var
声明就被使用,那么该变量就自动被声明为全局变量:
i = 10; // i现在是全局变量
使用var
申明的变量则不是全局变量,它的范围被限制在该变量被声明的函数体内
启用strict模式的方法是在JavaScript代码的第一行写上:
'use strict';
ES6引入let、const,之前,JavaScript 只有两种类型的作用域:全局作用域和函数作用域
const声明的变量不可以进行修改,而且声明的时候必须赋值,和java的final相似
const声明的变量对象,可以修改对象的属性
let声明的作用域为块级作用域,即只作用于{}
,如果在函数外(全局作用域)和函数内(函数作用域)使用和var没有区别。区别在于,函数(块)外声明后,再在函数(块)内声明并赋值的区别
var a = 5
for(var a = 0;a <= 10;a++){}
console.log(a)
//11
let a = 5
//如果在循环中用 let 声明了变量 a,那么只有在循环内,变量 a 才是可见的。
for(let a = 0;a <= 10;a++){}
console.log(a)
//5
可以使用函数typeof(obj)
,查看一个变量或值的数据类型
JavaScript不区分整数和浮点数,统一用Number表示,以下都是合法的Number类型
var a = 10;
var b = 20.2;
var c = 12e2;
var d = -30;
console.log(a);
console.log(b);
console.log(c);
console.log(d);
// 10
// 20.2
// 1200
// -30
字符串是以单引号'
或双引号"
括起来的任意文本
var a = 'abc';
var b = "def";
var c = `
你好呀,
这是一个多行字符串
`
console.log(a);
console.log(b);
console.log(c);
// abc
// def
// 你好呀,
// 这是一个多行字符串
ES6新增模板字符串,可以使用变量作为替换
注意:使用${}
作为模板,该字符串需要使用多行字符串的符号反引号
var name = 'lucy';
var age = 18;
var msg = `我叫${name},今年${age}岁了`
console.log(msg)
// 我叫lucy,今年18岁了
var str = 'abcdef'
//获取字符串长度
len = str.length
//获取指定索引的字符,字符串是不可变的!这个方法不可以用来赋值
b = str[1]
//将字符串全大写并返回
upStr = str.toUpperCase()
//将字符串全小写并返回
lowStr = str.toLowerCase()
//返回指定字符串所出现的索引,未找到返回-1
i = str.indexOf('bc')
//返回指定区间的字符串,左开右闭
s1 = str.substring(3)
s2 = str.substring(3,5)
var a = true;
var b = false;
console.log(a);
console.log(b);
// true
// false
数组是一组按顺序排列的集合,集合的每个值称为元素。JavaScript的数组可以包括任意数据类型。
//建议使用这种声明方式
var arr1 = [1,2,'lucy',3]
var arr2 = new Array(1,2,'lucy',3)
console.log(arr1)
console.log(arr2)
// [ 1, 2, 'lucy', 3 ]
// [ 1, 2, 'lucy', 3 ]
var a = ['lucy','lily','tom']
//获取数组的长度,这个长度是可以进行赋值的
//如果赋值,多出来的会用undefined表示,如果长度变短,会截取
a.length
//获取指定索引的元素
a[1]
//修改指定索引元素
a[1] = 'james'
//获取元素所在索引
a.indexOf('tom')
//截取数组,返回截取后的数组,左开右闭
a.slice(1,2)
//向数组末尾添加一个两个元素,返回新的长度,参数可变
a.push('mo','monkey')
//删除最后一个元素,并返回
a.pop()
//向数组开始添加一个元素,返回新的长度,参数可变
a.unshift('timi')
//删除第一个元素,并返回
a.shift()
//对数组进行排序,可传入函数自定义规则
a.sort()
//反转数组
a.reverse()
//从数组的第2位开始删除3个元素,再添加两个元素到这个位置,并返回删除的元素
a.splice(2,3,'lulu','gogo')
//从数组的第2位开始删除3个元素
a.splice(2,3)
//连接两个数组,并返回新的数组
b = ['haha','yiyi']
a.concat(b)
//将数组的所有元素使用指定分隔符连接后,返回字符串lucy-lili-tom
a.join('-')
//返回数组符合要求的元素组成的新数组
a.filter(name => {
return name.length > 3
})
JavaScript的对象是一种无序的集合数据类型,它由若干键值对组成
注意,最后一个键值对不需要在末尾加,
,如果加了,有的浏览器(如低版本的IE)将报错。
对象的key只可以是字符串
var lucy = {
name : 'lucy',
age : 18,
sex : '女'
};
console.log(lucy)
console.log(lucy.age)
// { name: 'lucy', age: 18, sex: '女' }
// 18
如果key含有特殊字符,那么必须使用引号包起来,说明是一个字符串,而且在获取对象属性值的时候,不可以使用obj.value
的方式,所以命名属性的时候一定要规范
var lucy = {
name : 'lucy',
age : 18,
'sex-name' : '女'
};
console.log(lucy)
console.log(lucy['sex-name'])
// { name: 'lucy', age: 18, 'sex-name': '女' }
// 女
var lucy = {
name : 'lucy',
age : 18,
'sex-name' : '女'
};
console.log('name' in lucy)
//js的所有对象最终原型链指向object,toString是object的
console.log('toString' in lucy)
//hasOwnProperty是判断对象本身有没有这个属性
console.log(lucy.hasOwnProperty('toString'))
// true
// true
// false
//表示Not a Number,即无法计算出结果
var a = NaN;
//表示无限大,超出Number能表示的最大值
var b = Infinity;
NaN和任何数值都不相等,和自己也不相等,要判断是否是NaN,需要使用函数isNaN()
null
表示一个“空”的值,它和0
以及空字符串''
不同,0
是一个数值,''
表示长度为0的字符串,而null
表示“空”。
JavaScript的设计者希望用null
表示一个空的值,而undefined
表示值未定义。事实证明,这并没有什么卵用,区分两者的意义不大。大多数情况下,我们都应该用null
。undefined
仅仅在判断函数参数是否传递的情况下有用。
y = 5
运算符 | 描述 | 例子 | x 运算结果 | y 运算结果 |
---|---|---|---|---|
+ | 加法 | x=y+2 | 7 | 5 |
- | 减法 | x=y-2 | 3 | 5 |
* | 乘法 | x=y*2 | 10 | 5 |
/ | 除法 | x=y/2 | 2.5 | 5 |
% | 取模(余数) | x=y%2 | 1 | 5 |
++ | 自增,前后和java的逻辑一样 | x=++y | 6 | 6 |
-- | 自减,前后和java的逻辑一样 | x=--y | 4 | 4 |
x = 10,y = 5
运算符 | 例子 | 等同于 | 运算结果 |
---|---|---|---|
= | x=y | x=5 | |
+= | x+=y | x=x+y | x=15 |
-= | x-=y | x=x-y | x=5 |
*= | x*=y | x=x*y | x=50 |
/= | x/=y | x=x/y | x=2 |
%= | x%=y | x=x%y | x=0 |
运算符 | 描述 | 比较 | 返回值 |
---|---|---|---|
== | 等于 | x==8 | false |
=== | 绝对等于(值和类型均相等) | x==="5" | false |
!= | 不等于 | x!=8 | true |
!== | 不绝对等于(值和类型有都不相等) | x!=="5" | true |
> | 大于 | x>8 | false |
< | 小于 | x<8 | true |
>= | 大于或等于 | x>=8 | false |
<= | 小于或等于 | x<=8 | true |
x = 6,y = 3
运算符 | 描述 | 例子 |
---|---|---|
&& | and | (x < 10 && y > 1) 为 true |
|| | or | `(x==5 |
! | not | !(x==y) 为 true |
js的流程控制语句和java的一样