- 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 是typeoftypeof 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 // falsea instanceof Array // true
typeof null // "object" 至于这个,辣鸡设计
非常难以理解一些点 undefined// 变量声明了,但没有赋值var i;i // undefined// 调用函数时,应该提供的参数没有提供,该参数等于 undefinedfunction f(x) {return x;}f() // undefined// 对象没有赋值的属性var o = new Object();o.p // undefined// 函数没有返回值时,默认返回 undefinedfunction f() {}f() // undefined
数值
0.1 + 0.2 === 0.3// false0.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) // trueisNaN(123) // false//正确使用function myIsNaN(value) {return typeof value === 'number' && isNaN(value);}//正确写法function myIsNaN(value) {return value !== value;}
所以很多项目约定 JavaScript 语言的字符串只使用单引号,本教程遵守这个约定。
with语句
和对象绑定语句.
