文章目录
JS基本概念
//单行
/*
*多
*行
*/
- 严格模式:strict mode,这是一个编译指示,告诉javascript引擎切换到严格模式。
funtion doSomething(){
"use strict";
//其他
}
关键字:可以控制语句的开始和结束。
保留字:还没有成为关键字的,留着以后用。
关键字 | 保留字 |
---|---|
break | abstract |
case | boolean |
catch | byte |
continue | char |
debugger | class |
default | const |
delete | debugger |
do | double |
else | enum |
finally | export |
for | extends |
if | final |
in | float |
instanceof | goto |
new | implement |
return | import |
switch | int |
this | interface |
throw | native |
try | package |
typeof | private |
var | protected |
void | public |
while | short |
with | static |
sup | |
synchronized | |
throws | |
transient | |
volatile |
var message;
//undefined
var message = 'hi';
message = 1090;
//有效但不推荐
var 定义的变量将变成定义改变量的作用域 的局部变量
function test(){
var message = "hi";//局部变量
//message = "hi"; 全局变量,程序正确
}
test();
alert(message);//错误i
未经声名的变量赋值,严格模式下会报错 ReferenceError;
-
变量由字母,数字,下划线或者美元符号$组成;
-
第一个字符可以是字母,下划线或美元符号 $ ;
-
后续的字符可以使字母、数字、下划线或美元符号;
-
变量名称区分大小写保留字、关键字、JavaScript预定义了很多全局变量和函数不能用作自定义变量名和函数名
-
约定俗称:标识符要见名知意;
-
数据类型
-
五种简单的:
- Undefine
- Null
- Boolean
- Number
- Sring
一种复杂的: - Object:本质上是由一组无序的名值对组成。
-
typeof操作符:
返回一个字符串:- “undefined”
- “number”
- “string”
- ''boolean"
- '‘object’
- “functon”(新的会是 object)
var message = "sad";
console.log(typeof message);//"string"
console.log(typeof (message));//"string"
console.log(typeof 33);//"number"
console.log(typeof false)//"boolean"
console.log(typeof null);//"object"
console.log(typeof /\d+/);//"object"
Undifined
var a ;
console.log(a==undefined)//true
console.log(a===undefined)//true
console.log(undefined == false)//false
console.log(undefined === false)//false
console.log(undefined == true)//false
console.log(undefined === true)//false
Null
逻辑上的空的对象指针
console.log(typeof null);//"object"
console.log(null instanceof Object);//false
//undifined 派生自null
console.log(null==undefined)//true
console.log(null===undefined)//false
Boolean
逻辑上的空的对象指针
console.log(typeof false)//"boolean"
console.log(1 == true)//true
console.log(1 === true)//false
console.log(0 == false)//true
console.log(0 === false)//false
//转换了boolean类型
var message= "dadasdfa";
var mesToBoolean = Boolean(message);
console.log(mesToBoolean );//true
console.log(Boolean(undefined));//false
类型 | Boolean()返回true | Boolea()返回false |
---|---|---|
Boolean | true | false |
String | 非空字符串 | 空字符 “” |
Number | 非零数 | 0、NaN |
Object | 任何对象 | null |
Undefine | undefine |
if语句 自动执行相应的Boolean();
Number
八进制的时候,第一个数字是0,之后的数字不能超过范围,否则会变成十进制。
八进制在严格模式下无效。会抛出错误
var num1= 070//八进制的56
var num2 = 079//十进制的79
十六进制的前两位必须是0x,A~F不分大小写。
算术运算的时候,所有的进制都会转变为十进制。
浮点数需要的内存空间是整数的两倍。
科学计数法:var folatNum = 3.125e7; // 31250000
最高精度为17位小数。浮点数计算会产生舍入误差:这是由于IEEE754标准的通病
0.1+0.2=0.30000000000000004
数值范围,Number.MIN_VALUE,Number.MAX_VALUE,
-Infinity(负无穷) Infinite(正无穷)如果数值达到无穷就会无法计算,可以用**isFinite()**判断是否在这个范围,在 true
var result = Number.MAX_VALUE*2;
console.log(isFinite(result))
NaN
Not a Number 特殊的数值,用来表示一个要返回数值的操作,未返回数值,避免报错。不会影响其他代码运行。
NaN和谁都不相等,包括它自己。
isNaN(“aaa”);//true
isNaN(“10”);//false
转换为数值
-
Number()
如果是对象,就调用valueOf(), 如果转换的结果是NaN,就调用toString方法。
null 返回0,undefined 返回 NaN, ""返回0; -
parsrInt()
遇到非字符会停止转化,自动进行十进制转化,第二个参数,表示转化时的基数是多少。
var num = parseInt(“oxAF”,16) //175
var num = parseInt(“AF”,16) //175
‘’’'返回NaN,字符串返回NaN. -
parseFloat()
能够识别第一个小数点了只解析十进制,如果是整数就会返回整数。
String
转义字符
/t制表符 /b空格 /r回车 /n换行
toString方法返回方法返回字符串的一个副本,null和undifine没有这个方法。
输入参数可以,返回对应进制的字符串。
String()方法:
- 如果有toString()方法就会调用这个,返回相应结果。
- null 返回“null”,undefined 返回“undefined”
Object
属性和方法:
constructor:保存构造当前对象的函数
hasOwnProperty(propertyName):用于检查给定的属性是否在当前的对象中,== propertyName==需是字符串。
isPrototypeOf(Object):用于检查传入的对象是否是当前对象的原型。
**prototypeIsEnumerable(prototypeName)**是否可以for in 枚举
toLocaleString():返回对象的字符串,字符串反映对象所在的本地化执行环境
**toString()**返回对象的字符串表示
**valueOf()**返回对象对应的字符串、数值或布尔值表示。通常与toString()的返回值相同。
Symbol(很多属性自带方式的实现基础,可单独开博文)
Symbol(符号)是ECMAScript 6 新增的数据类型,是原始类型
符号就是用来创建唯一记号,进而用作非字符串形式的对象属性。
Symbol.for()对每个字符串键都执行幂等操作。第一次使用某个字符串调用时,它会检查全局运行时注册表,发现不存在对应的符号,于是就会生成一个新符号实例并添加到注册表中。
后续使用相同字符串的调用同样会检查注册表,发现存在与该字符串对应的符号,然后就会返回该符号实例
**Symbol.keyFor()**来查询全局注册表,这个方法接收符号,返回该全局符号对应的字
符串键。如果查询的不是全局符号,则返回undefined。
let genericSymbol = Symbol();
let otherGenericSymbol = Symbol();
let fooSymbol = Symbol('foo');
let otherFooSymbol = Symbol('foo');
console.log(genericSymbol == otherGenericSymbol); // false
console.log(fooSymbol == otherFooSymbol); // false
let fooGlobalSymbol = Symbol.for('foo'); // 创建新符号
let otherFooGlobalSymbol = Symbol.for('foo'); // 重用已有符号
console.log(fooGlobalSymbol === otherFooGlobalSymbol); // true
// 创建全局符号
let s = Symbol.for('foo');
console.log(Symbol.keyFor(s)); // foo
// 创建普通符号
let s2 = Symbol('bar');
console.log(Symbol.keyFor(s2)); // undefined
操作符
1、自增自减
let s1 = "2";
let s2 = "z";
let b = false;
let f = 1.1;
let o = {
valueOf() {
return -1;
}
};
s1++; // 值变成数值3
s2++; // 值变成NaN
b++; // 值变成数值1
f--; // 值变成0.10000000000000009(因为浮点数不精确)
o--; // 值变成-2