1. JavaScript 程序的执行单位为行(line),也就是一行一行地执行(但是只会提取变量的声明 ,但是不会提升变量的赋值)。一般情况下,每一行就是一个语句。
  2. js 语法也可以不写最后的分号,但是 约定还是要写的
  3. js 的变量是松散类型的,所谓松散类型就是可以用来保存任何类型的数据,,每个变量仅仅只是一个用来保存值的占位符而已
  4. 因为js 是松散类型的,所以需要一种手段来检测给定变量的数据类型 typeof 运算符 除这个之外还有两种方法(instanceof运算符Object.prototype.toString方法)
  5. 和基础类型有关 强制转换主要指使用Number()String()Boolean()三个函数,手动将各种类型的值,分别转换成数字、字符串或者布尔值.但是你还有parseInt. 但是Number函数将字符串转为数值,要比parseInt函数严格很多。基本上,只要有一个字符无法转成数值,整个字符串就会被转为NaN
  1. //变量 大小写敏感
  2. var a = 1; 以及let const
  3. //JavaScript 是一种动态类型语言,也就是说,变量的类型没有限制,变量可以随时更改类型。
  4. var a = 1;
  5. a = 'hello';
  6. //变量提升 (非常不好理解的语言)
  7. console.log(a);
  8. var a = 1;
  9. //这一段实际的执行结果是
  10. var a;
  11. console.log(a);
  12. a = 1;
  13. 最后的结果是显示undefined,表示变量a已声明,但还未赋值。

JavaScript 引擎的工作方式是,先解析代码,获取所有被声明的变量,(但是只会提取变量的声明 ,但是不会提升变量的赋值)然后再一行一行地运行。这造成的结果,就是所有的变量的声明语句,都会被提升到代码的头部,这就叫做变量提升(hoisting)。

  1. <!--和--> 这个也是被兼容 html 注释
  2. 需要注意的是,-->只有在行首,才会被当成单行注释,否则会当作正常的运算。
  3. 不要乱写就是了
  4. function countdown(n) {
  5. while (n --> 0) console.log(n);
  6. }
  7. countdown(3)
  8. // 2
  9. // 1
  10. // 0
  11. 看不懂是吧 . n --> 0 被翻译成 n-- > 0 = n减减

表达式和运算符

https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Guide/Expressions_and_Operators

标签 (这个支持代码跳转)

js 的数据类型

因为js 是松散类型的,所以需要一种手段来检测给定变量的数据类型 typeof

原始类型(primitive type)的值

  1. - 数值(number):整数和小数(比如`1``3.14`
  2. - 字符串(string):文本(比如`Hello World`)。
  3. - 布尔值(boolean):表示真伪的两个特殊值,即`true`(真)和`false`(假)

合成类型(complex type)的值
对象(object):各种值组成的集合。
两个特殊值

  1. - `undefined`:表示“未定义”或不存在,即由于目前没有定义,所以此处暂时没有任何值
  2. - `null`:表示空值,即此处的值为空。
  1. 类型的化,主要api typeof
  2. typeof 123 // "number"
  3. typeof '123' // "string"
  4. typeof false // "boolean"
  5. function f() {}
  6. typeof f // "function"
  7. typeof undefined // "undefined"
  8. // 错误的写法
  9. if (v) {
  10. // ...
  11. }
  12. // ReferenceError: v is not defined
  13. // 正确的写法
  14. if (typeof v === "undefined") {
  15. // ...
  16. }
  1. //有关于对象
  2. typeof window // "object"
  3. typeof {} // "object"
  4. typeof [] // "object" // 空数组([])的类型也是object,这表示在 JavaScript 内部,数组本质上只是一种特殊的对象。
  5. var o = {};
  6. var a = [];
  7. //instanceof运算符可以区分数组和对象
  8. o instanceof Array // false
  9. a instanceof Array // true
  1. typeof null // "object" 至于这个,辣鸡设计
  1. 非常难以理解一些点 undefined
  2. // 变量声明了,但没有赋值
  3. var i;
  4. i // undefined
  5. // 调用函数时,应该提供的参数没有提供,该参数等于 undefined
  6. function f(x) {
  7. return x;
  8. }
  9. f() // undefined
  10. // 对象没有赋值的属性
  11. var o = new Object();
  12. o.p // undefined
  13. // 函数没有返回值时,默认返回 undefined
  14. function f() {}
  15. f() // undefined

数值

  1. 0.1 + 0.2 === 0.3
  2. // false
  3. 0.3 / 0.1
  4. // 2.9999999999999996
  5. (0.3 - 0.2) === (0.2 - 0.1)
  6. // false

与数值相关的全局方法

parseInt 是内置函数,所以不需要有个对象来调用,区别于 java

如果parseInt的参数不是字符串,则会先转为字符串再转换。

  1. parseInt(1.23) // 1
  2. // 等同于
  3. parseInt('1.23') // 1

isNaN方法可以用来判断一个值是否为NaN。 但是这样使用是会有问题的

  1. isNaN(NaN) // true
  2. isNaN(123) // false
  3. //正确使用
  4. function myIsNaN(value) {
  5. return typeof value === 'number' && isNaN(value);
  6. }
  7. //正确写法
  8. function myIsNaN(value) {
  9. return value !== value;
  10. }

所以很多项目约定 JavaScript 语言的字符串只使用单引号,本教程遵守这个约定。

with语句
和对象绑定语句.