你捡起了道具:遗失的纸片2# 一张普通的纸片,隐隐约约能够看到目录:“强制类型转换、运算符、语句、对象、函数、作用域”。边角还有被撕扯的痕迹,它们应该属于一个笔记本,但不知为什么被主人撕下来丢掉了。 提示:集齐所有纸片应该可以得到一本技能书。 👇点击下方按钮调查
7.强制类型转换
转string
:
- 直接调用被转换对象的
toString()
方法,该方法不会影响原值,会将转换后的结果返回。null
与undefined
无toString()
方法。 - 调用
String()
函数,并将被转换的变量作为参数传入,使用String()
函数转换时,null
→”null”,undefined
→”undefined”。
转Number
:
- 使用
Number()
函数
?→数值 | 转换结果 |
---|---|
字符串 | 非纯数字转换为NaN ,空值/空格转换为0 |
布尔 | true→1,false→0 |
null | 0 |
undefined | NaN |
2.使用parseInt()
/parseFloat()
将字符串转换为整型/浮点型 该方法可去除字符串中非数字部分 原理:读到第一个非数字位,往后都忽略
“123px”→123 “123px456”→123”123.5”→123
如果对非String使用parseInt()
/parseFloat()
,会先转为String
,再转为Number
,如
true→”true”→NaN 123.5→”123.5”→123 所以
parseInt()
也有取整的作用
3.其他进制数字
进制 | 命名规定 |
---|---|
Hex | 0x?? |
Oct | 0?? |
Bin | 0B?? |
像“070”这种字符串有的浏览器会当成八进制解析
明确制定进制:parseInt(a,10)可向
parseInt()
传两个参数,第二个参数表示进制。
转Boolean
:
使用Boolean()
参数:
?→Boolean | 转换结果 |
---|---|
数字 | 除了0和NaN ,其他都是true |
字符串 | 除了空串,其他都是true |
对象 | true |
null/undefined | false |
unicode转换:
- JS:\\u+unicode(四位16进制编码)
- HTML:&#+unicode(十进制编码)
8.运算符
运算符 | 运算法则 | 隐式转换 | |||
---|---|---|---|---|---|
+ | ①NaN与任何数运算都得NaN②亦可字符串合并③任何值与字符串相加都转为字符串合并 | 是 | |||
-、*、/…… | 任何值都转换为Number参与运算 | 是 | |||
+(正)、-(负) | 非Number值先转为Number,再求正/反 | 是 | |||
!、\ | \ | 、&& | 先转为布尔值,再进行逻辑运算,且返回原值,而不是bool变量 | 是 | |
- | 与:第一个为true,则必然返回第二个;第一个为false,则必然返回第一个(找false) | ||||
- | 或:第一个为true,则必然返回第一个,第一个为false,则必然返回第二个(找true) | ||||
>/\\< | ①非数值比较时将其转换为数值②任何值与NaN比较都是false③如果富豪两侧都是字符串,则不会 | 成数字而是转成相应的字符,使用unicode编码(一位一位比,两位一样就比下一位,直至比出 | 果)→比较字符串时一定要转型 | 是 | |
\==/!= | ①undefined衍生自null,所以相等②NaN不与任何值相等,包括它本身③判断是否为NaN:`isNaN( | `函数 | 是 | ||
\=== | 全等→不做类型转换,类型不同的直接返回false | 否 | !== | 不全等→不做类型转换,类型相同直接返回false | 否 |
9.语句
自上向下执行,可用{}对其分组。 同一个{}称一组语句,要么都执行要么都不执行,一个{}称代码块,{}只有分组作用,不能隔离语句
流程控制
语句 | 语法 | 注释 |
---|---|---|
条件 | if(?){A}else{B} | - |
条件分支 | switch(?){case 表达式:语句 break;……..default:语句} | case后是全等判断 |
循环 | while(条件表达式){语句}/for(初始化表达式;条件表达式;更新表达式){} | 每次循环前先对条件表达式进行判断,若为true则进入循环体 |
10.对象
分类
- 内建对象:由ES标准中定义的对象,在任何ES实现中都可使用(Math、String等)
- 宿主对象:由JS运行环境提供的对象,目前来讲指浏览器提供的对象,如BOM、DOM
- 自定义对象:开发者自己创建的对象
创建对象
方法一:声明后设置属性
step1.实例化对象:
1 | var obj=new Object(); |
step2.在对象中添加属性&方法:
1 | obj.name="张三"; |
step3.读取属性:
1 | console.log(obj.name); |
如果读取对象中未定义的属性,不会报错,返回undefined
方法二:声明时设置属性
1 | var obj={ |
使用该方法声明对象时属性名的引号可加可不加,但使用特殊名时必须加。 属性与值之间使用“:”链接,各属性用“,”连接,结尾属性不加“,”。
属性名/值
属性名:对象的属性名不强制使用命名规范,但若使用不符合命名规范的名称,调用属性时应使用对象[属性名]
的方法,此处obj[name]=obj.name,但特殊命名无法使用点调用。中括号里也可以传入变量 属性值:可以是任意值,包括对象。
in运算符
检查一个对象中有无规定属性,如:
1 | ("test" in obj) |
→检查obj对象中有无“test”属性
11.函数
函数也是一个对象
创建
方法一:声明函数对象(不常用)
step1.创建一个函数对象,可以将要封装的代码以字符串的形式传递给构造函数
1 | var fun=new Function("console.log('Hello');"); |
step2.调用
1 | fun(); |
方法二:使用函数声明创建函数
function 函数名([形参1,形参2….]) { 语句… }
1 | function fun() |
方法三:使用函数表达式创建函数
var 函数名=function([形参1,形参2….]) { 语句… }
1 | var fun=function() |
参数
函数不会检查参数的数量,未赋值的形参将初始化为undefined
返回值
使用return
设置返回值,return后的语句不会执行。 return
后不接任何值,或者没有return
语句函数将返回undefined
执行匿名函数(立即执行)
1 | (function(){ |
第一个括号代表函数是一整个对象,后面括号将其执行→对象()
for…in语句
与for联用,与C#相似。 打印obj对象中所有的属性名与属性值:
1 | function printObject() |
12.作用域
指一个变量的作用范围
在JS中,有两种作用域:①全局作用域②函数作用域
①全局作用域
创建方法:直接写在script
标签下 生命周期:在页面打开时创建,页面关闭时销毁 调用方法:全局作用域中有个全局对象window
可使用,其由浏览器创建。在全局作用域中创建的变量都会作为window
的属性保存,创建的函数都会作为window
的方法保存。
变量的声明提前:
var
声明的变量会在所有代码执行之前被声明,但不会被赋值
函数的声明提前:
- 使用函数声明形式创建的函数(
function 函数() {}
)会在所有代码执行之前就被创建,所以我们可以在创建声明前来调用 - 使用函数表达式(
var fun=function(){}
)创建的函数不会被提前创建,不能提前调用
②函数作用域
生命周期:调用函数时创建函数作用域,函数执行完毕后作用域销毁 多函数作用域相互独立,函数作用域可访问全局作用域 函数操作变量时,先在自己作用域中找,找不到再去上一级作用域中找。若要直接使用全局作用域可以通过window对象的属性调用