- JavaScript 程序的执行单位为行(line),也就是一行一行地执行(但是只会提取变量的声明 ,但是不会提升变量的赋值)。一般情况下,每一行就是一个语句。
- js 语法也可以不写最后的分号,但是 约定还是要写的
- js 的变量是松散类型的,所谓松散类型就是可以用来保存任何类型的数据,,每个变量仅仅只是一个用来保存值的占位符而已
- 因为js 是松散类型的,所以需要一种手段来检测给定变量的数据类型 typeof 运算符 除这个之外还有两种方法(
instanceof
运算符Object.prototype.toString
方法) - 和基础类型有关 强制转换主要指使用
Number()
、String()
和Boolean()
三个函数,手动将各种类型的值,分别转换成数字、字符串或者布尔值.但是你还有parseInt. 但是Number
函数将字符串转为数值,要比parseInt
函数严格很多。基本上,只要有一个字符无法转成数值,整个字符串就会被转为NaN
。
//变量 大小写敏感
var a = 1; 以及let 和const
//JavaScript 是一种动态类型语言,也就是说,变量的类型没有限制,变量可以随时更改类型。
var a = 1;
a = 'hello';
//变量提升 (非常不好理解的语言)
console.log(a);
var a = 1;
//这一段实际的执行结果是
var a;
console.log(a);
a = 1;
最后的结果是显示undefined,表示变量a已声明,但还未赋值。
JavaScript 引擎的工作方式是,先解析代码,获取所有被声明的变量,(但是只会提取变量的声明 ,但是不会提升变量的赋值)然后再一行一行地运行。这造成的结果,就是所有的变量的声明语句,都会被提升到代码的头部,这就叫做变量提升(hoisting)。
<!--和--> 这个也是被兼容 html 注释
需要注意的是,-->只有在行首,才会被当成单行注释,否则会当作正常的运算。
不要乱写就是了
function countdown(n) {
while (n --> 0) console.log(n);
}
countdown(3)
// 2
// 1
// 0
看不懂是吧 . n --> 0 被翻译成 n-- > 0 = n减减
表达式和运算符
https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Guide/Expressions_and_Operators
标签 (这个支持代码跳转)
js 的数据类型
因为js 是松散类型的,所以需要一种手段来检测给定变量的数据类型 typeof
原始类型(primitive type)的值
- 数值(number):整数和小数(比如`1`和`3.14`)
- 字符串(string):文本(比如`Hello World`)。
- 布尔值(boolean):表示真伪的两个特殊值,即`true`(真)和`false`(假)
合成类型(complex type)的值
对象(object):各种值组成的集合。
两个特殊值
- `undefined`:表示“未定义”或不存在,即由于目前没有定义,所以此处暂时没有任何值
- `null`:表示空值,即此处的值为空。
类型的化,主要api 是typeof
typeof 123 // "number"
typeof '123' // "string"
typeof false // "boolean"
function f() {}
typeof f // "function"
typeof undefined // "undefined"
// 错误的写法
if (v) {
// ...
}
// ReferenceError: v is not defined
// 正确的写法
if (typeof v === "undefined") {
// ...
}
//有关于对象
typeof window // "object"
typeof {} // "object"
typeof [] // "object" // 空数组([])的类型也是object,这表示在 JavaScript 内部,数组本质上只是一种特殊的对象。
var o = {};
var a = [];
//instanceof运算符可以区分数组和对象
o instanceof Array // false
a instanceof Array // true
typeof null // "object" 至于这个,辣鸡设计
非常难以理解一些点 undefined
// 变量声明了,但没有赋值
var i;
i // undefined
// 调用函数时,应该提供的参数没有提供,该参数等于 undefined
function f(x) {
return x;
}
f() // undefined
// 对象没有赋值的属性
var o = new Object();
o.p // undefined
// 函数没有返回值时,默认返回 undefined
function f() {}
f() // undefined
数值
0.1 + 0.2 === 0.3
// false
0.3 / 0.1
// 2.9999999999999996
(0.3 - 0.2) === (0.2 - 0.1)
// false
与数值相关的全局方法
parseInt 是内置函数,所以不需要有个对象来调用,区别于 java
如果parseInt
的参数不是字符串,则会先转为字符串再转换。
parseInt(1.23) // 1
// 等同于
parseInt('1.23') // 1
isNaN
方法可以用来判断一个值是否为NaN
。 但是这样使用是会有问题的
isNaN(NaN) // true
isNaN(123) // false
//正确使用
function myIsNaN(value) {
return typeof value === 'number' && isNaN(value);
}
//正确写法
function myIsNaN(value) {
return value !== value;
}
所以很多项目约定 JavaScript 语言的字符串只使用单引号,本教程遵守这个约定。
with语句
和对象绑定语句.