1) 单引号或者双引号
单引号或者双引号没有根本区别,但是双引号会搜索引号内的内容是不是有变量,有则输出其值,没有则输出原有内容。所以输出纯字符串的时候用单引号比双引号效率高,因为省去检索的过程。
(1)只使用字符的字符串,单引号和双引号没有区别
(2)在单引号包括的字符串中可以直接用双引号,在双引号包括的字符串中可以直接用单引号
(3)如果在双引号包括的字符串中用双引号,需要用反斜杠转义,注意是"\" ;同样在单引号包括的字符串中用单引号,也需要转义“\”
2) var、let、const 区别?
1.3 2016.09.13 15:42* 字数 1038 阅读 34333评论 4喜欢 51
随着ES6规范的到来,Js中定义变量的方法已经由单一的 var 方式发展到了 var、let、const 三种之多。var 众所周知,可那俩新来的货到底有啥新特性呢?到底该啥时候用呢?
我们先来絮叨絮叨 var 方式定义变量有啥 bug ?
-
Js没有块级作用域
请看这样一条规则:在JS函数中的var声明,其作用域是函数体的全部。
-
Js没有块级作用域
for(var i=0;i<10;i++){
var a = 'a';
}
console.log(a);
明明已经跳出 for 循环了,却还可以访问到 for 循环内定义的变量 a ,甚至连 i 都可以被放访问到,尴尬~
- 2.** 循环内变量过度共享 **
你可以猜一下当执行以下这段代码时会发生什么
for (var i = 0; i < 3; i++) {
setTimeout(function () {
console.log(i)
}, 1000);
}
在浏览器里运行一下,看看和你预想的结果是否相同?
没错,控制台输出了3个3,而不是预想的 0、1、2。
事实上,这个问题的答案是,循环本身及三次 timeout 回调均共享唯一的变量 ** i 。当循环结束执行时,i 的值为3。所以当第一个 timeout 执行时,调用的 i 当让也为 3 了。
话说到这儿,想必客官已经猜到 let 是干嘛用的。
你没猜错,就是解决这两个bug的。你尽可以把上述的两个例子中的 var 替代成 let 再运行一次。
注意:必须声明 'use strict' 后才能使用let声明变量,否则浏览并不能显示结果
let是更完美的var
-
let声明的变量拥有块级作用域。 也就是说用let声明的变量的作用域只是外层块,而不是整个外层函数。let 声明仍然保留了提升特性,但不会盲目提升,在示例一中,通过将var替换为let可以快速修复问题,如果你处处使用let进行声明,就不会遇到类似的bug。
-
let声明的全局变量不是全局对象的属性。这就意味着,你不可以通过window.变量名的方式访问这些变量。它们只存在于一个不可见的块的作用域中,这个块理论上是Web页面中运行的所有JS代码的外层块。
-
形如for (let x...)的循环在每次迭代时都为x创建新的绑定。
这是一个非常微妙的区别,拿示例二来说,如果一个for (let...)循环执行多次并且循环保持了一个闭包,那么每个闭包将捕捉一个循环变量的不同值作为副本,而不是所有闭包都捕捉循环变量的同一个值。
所以示例二中,也以通过将var替换为let修复bug。
这种情况适用于现有的三种循环方式:for-of、for-in、以及传统的用分号分隔的类C循环。 -
用let重定义变量会抛出一个语法错误(SyntaxError)。
这个很好理解,用代码说话
let a = 'a';
let a = 'b';
上述写法是不允许的,浏览器会报错,因为重复定义了。
** 在这些不同之外,let和var几乎很相似了。举个例子,它们都支持使用逗号分隔声明多重变量,它们也都支持解构特性。 **
const
-
ES6引入的第三个声明类关键词:const
-
一句话说明白,const 就是用来定义常量的!任何脑洞(fei)大(zhu)开(liu)的写法都是非法的
比如这样:
//只声明变量不赋值
const a
这样:
//重复声明变量
const a = 'a';
const a = 'b';
还有这样:
//给变量重新赋值
const a = 'a';
a = 'b'
再来个黑科技:
//不过不推荐这么干,实在没啥意思,常量常量,不变的才叫常量嘛~
const a = {a:'a'};
//重新赋值当然是行不通的了
a = {a:'b'};
//嘿嘿嘿科技
a.a = 'b'
- const 确实没啥说的,普通用户使用完全没问题,高(dou)端(bi)用户咋用都是问题。
以上就是作者对 var、let、const 用法的一些总结,有不当之处,还请大大们指出。
3) js 运算符
x=5,下面的表格解释了比较运算符:
运算符 | 描述 | 比较 | 返回值 | 实例 |
---|---|---|---|---|
== | 等于 | x==8 | false | 实例 » |
x==5 | true | 实例 » | ||
=== | 绝对等于(值和类型均相等) | x==="5" | false | 实例 » |
x===5 | true | 实例 » | ||
!= | 不等于 | x!=8 | true | 实例 » |
!== | 不绝对等于(值和类型有一个不相等,或两个都不相等) | x!=="5" | true | 实例 » |
x!==5 | false | 实例 » | ||
> | 大于 | x>8 | false | 实例 » |
< | 小于 | x<8 | true | 实例 » |
>= | 大于或等于 | x>=8 | false | 实例 » |
<= | 小于或等于 | x<=8 | true | 实例 » |
4) js中逻辑运算符&&和||的妙用
a()&&b() 如果a()为真,那么则执行b(),并返回b()执行之后的结果;如果a()为假,则返回a的结果
a()||b() 如果a()为假,那么则执行b(),并返回b()执行之后的结果;如果a()为真,则返回a的结果
5) null 和undefined
typeof undefined + "<br>" +
typeof null + "<br>" +
(null === undefined) + "<br>" + // 类型不等
(null == undefined) // 值相等
运行结果
undefined
object
false
true
null 和undefined 是不同的类型, undefined未定义, null 是空值
6) JavaScript 数据类型
在 JavaScript 中有 5 种不同的数据类型:
string
number
boolean
object
function
3 种对象类型:
Object
Date
Array
2 个不包含任何值的数据类型:
null
undefined
typeof 3.14 // 返回 number
typeof NaN // 返回 number
typeof false // 返回 boolean
typeof [1,2,3,4] // 返回 object
typeof {name:'John', age:34} // 返回 object
typeof new Date() // 返回 object
typeof function () {} // 返回 function
typeof myCar // 返回 undefined (如果 myCar 没有声明)
typeof null // 返回 object
7) 并非真正的常量
const 的本质: const 定义的变量并非常量,并非不可变,它定义了一个常量引用一个值。使用 const 定义的对象或者数组,其实是可变的。下面的代码并不会报错:
// 创建常量对象
const car = {type:"Fiat", model:"500", color:"white"};
// 修改属性:
car.color = "red";
// 添加属性
car.owner = "Johnson";
8) json 数据模拟 (实际开发中直接模拟对象)
JSON 格式化后为 JavaScript 对象
JSON 格式在语法上与创建 JavaScript 对象代码是相同的。
由于它们很相似,所以 JavaScript 程序可以很容易的将 JSON 数据转换为 JavaScript 对象。
JSON 语法规则
数据为 键/值 对。
数据由逗号分隔。
大括号保存对象
方括号保存数组
JSON 数组
"sites":[
{"name":"Runoob", "url":"www.runoob.com"},
{"name":"Google", "url":"www.google.com"},
{"name":"Taobao", "url":"www.taobao.com"}
]
网友评论