0
点赞
收藏
分享

微信扫一扫

[record] JavaScript基础

JavaScript


【标识符】

【注释】

x = 1; <!-- x = 2;
--> x = 3;
// 只有x=1会执行,其他会被注释掉。
// 为什么x=3也会被注释掉?


function countdown(n) {
  while (n --> 0) console.log(n);
	// n --> 0会被当做n-- > 0执行。
}
countdown(3)
// 2
// 1
// 0

【字面量】

【变量】

【标签label】

// 跳出双重循环。
top:
  for (var i = 0; i < 3; i++){
    for (var j = 0; j < 3; j++){
      if (i === 1 && j === 1) break top;
      console.log('i=' + i + ', j=' + j);
    }
  }

// 跳出代码块。
foo: {
  console.log(1);
  break foo;
  console.log('本行不会输出');
}

// 进入下一层外层循环。
top:
  for (var i = 0; i < 3; i++){
    for (var j = 0; j < 3; j++){
      if (i === 1 && j === 1) continue top;
      console.log('i=' + i + ', j=' + j);
    }
  }

【数据类型】

(1)Number

0.1 + 0.2 === 0.3
// false

0.3 / 0.1
// 2.9999999999999996

(0.3 - 0.2) === (0.2 - 0.1)
// false
(1 / +0) === (1 / -0) // false
// 如果字符串头部有空格,自动去除空格。
parseInt('    81') // 81

// 如果参数不是字符串,则会先转为字符串再转换。先转换成十进制,再转换成字符串,再按进制解析。
parseInt(1.23) // 1
// 等同于
parseInt('1.23') // 1

// 字符串转为整数的时候,是一个个字符依次转换,如果遇到不能转为数字的字符,就不再进行下去,返回已经转好的部分。
parseInt('8a') // 8
parseInt('12**') // 12
parseInt('12.34') // 12
parseInt('15e2') // 15

// 如果字符串的第一个字符不能转化为数字(后面跟着数字的正负号除外),返回NaN。
parseInt('abc') // NaN

// 如果字符串以0x或0X开头,parseInt会将其按照十六进制解析。
parseInt('0x10') // 16

//如果字符串以0开头,将其按照10进制解析。
parseInt('011') // 11

// 对于那些会自动转为科学计数法的数字,parseInt会将科学计数法的表示方法视为字符串,因此导致一些奇怪的结果。
parseInt(0.0000008) // 8
// 等同于
parseInt('8e-7') // 8

// parseInt方法还可以接受第二个参数(2到36之间),表示被解析的值的进制,返回该值对应的十进制数。默认情况下,parseInt的第二个参数为10,即默认是十进制转十进制。

// 如果超出范围,则返回NaN。如果第二个参数是`0`、`undefined`和`null`,则直接忽略。

// 如果字符串包含对于指定进制无意义的字符,则从最高位开始,只返回可以转换的数值。如果最高位无法转换,则直接返回NaN。
parseInt('1546', 2) // 1
parseInt('546', 2) // NaN
// 如果字符串符合科学计数法,则会进行相应的转换。
parseFloat('314e-2') // 3.14
parseFloat('0.0314E+2') // 3.14

// 如果字符串包含不能转为浮点数的字符,则不再进行往后转换,返回已经转好的部分。
parseFloat('3.14more non-digit characters') // 3.14

// parseFloat方法会自动过滤字符串前导的空格。
parseFloat('\t\v\r12.34\n ') // 12.34

// 如果参数不是字符串,或者字符串的第一个字符不能转化为浮点数,则返回NaN。
parseFloat([]) // NaN
parseFloat('FF2') // NaN
parseFloat('') // NaN

// isNaN只对数值有效,如果传入其他值,会先被Number函数转成数值,再进行判断。
isNaN('Hello') // true

// 空或非空对象返回true
// 空对象转换为数值为NaN
isNaN({}) // true

// 空数组返回false
// 空数组转换为数值为0
???
isNaN([]) // false

// 只有一个数值成员的数组返回false
isNaN([123]) // false
isNaN(['123']) // false

// 含有非数值成员的数组返回true
isNaN(['xzy']) // true
function myIsNaN(value){
	return value !== value;
}

(2)String

(3)Boolean

(4)Undefined

(5)Null

// 变量声明了,但没有赋值
var i;
i // undefined

// 调用函数时,应该提供的参数没有提供,该参数等于 undefined
function f(x) {
  return x;
}
f() // undefined

// 对象没有赋值的属性
var  o = new Object();
o.p // undefined

// 函数没有返回值时,默认返回 undefined
function f() {}
f() // undefined

(6)obeject

【强制类型转换】

(1)转换为String

(2)转换为Number

(3)转换为Boolean

【判断数据类型】

(1)typeof

(2)instanceof

(3)Object.prototype.toString

【运算符】

【Date对象】

【Math】

【包装类】

【函数】

(1)函数的声明

(2)函数的属性和方法

(3)变量的作用域

(4)变量、函数提升

(5)参数

// slice
var args = Array.prototype.slice.call(arguments);


var args = [];
for(var i = 0; i < arguments.length; i++){
	args.push(arguments[i]);
}

(6)构造函数(类)

function Person(name, age, gender){
	this.name = name;
	this.age = age;
	this.gender = gender;
	
	//执行n次创建n次
	//浪费内存空间。
	this.sayHello = function(){
		alert(this.name);
	};
	
	//执行n次创建1次
	//把函数声明在全局作用域,污染全局作用域的命名空间,且不安全。
	this.sayHello = fun;
	
}
function fun(){
	alert(this.name);
}
//建议使用原型
Person.prototype.sayHello = function(){
	alert(this.name);
};
var per = new Person('孙悟空', 18, '男');
per.sayHello();

(7)原型prototype

【数组】

(1)数组的基本操作

(2)数组的方法

【正则表达式】

【DOM】

【事件】

(1)事件对象event

(2)事件冒泡Bubble

(3)事件委派

(4)事件传播

【BOM】

【JSON】

【垃圾回收Garbage Collection】

【base64】

举报

相关推荐

0 条评论