前端宝典【犀牛书】01(js起源+概念、数据类型的语法+数据类型的转换)

js有不同的解析器,解析器(引擎)有不同的版本,ECMA(欧洲计算机协会),ECMAscript(js标准语法)。

js的核心语法针对文本、数组、日期、正则表达式。输入和输出均是宿主环境及客户端javascript。

对象:名/值对的集合,或者字符串的值映射的集合。

表达式是一个短语可以得出结果,不影响程序,语句影响程序。

初始化表达式(可以理解为对变量赋值,对对象映射,数组定义元素)。

直接量:在程序中可以直接使用的数据值。

标识符:用来对变量或者函数进行命名。

javascript必须以字母、下划线或美元符开始/*不能是数字开头,因为数字和标识符unicode编码相似不易解析*/(ECMA语法允许变量是数学符号或者非英语语言)。

对于分号的使用:

  1. 不能正常解析(“()”、“【】”、“/”、“+”、“-”容易解析在一起)
  2. return、break、continue不能有换行
  3. ++、--会作为下一行代码的前缀一起解析

数据类型:能够表示并操作的值叫数据类型。

变量:变量是一个值的名称,可以通过名称获得对值的引用。

gc(garbage collection)当没有引用指向一个对象,解析器就会自动回收资源。

 

一、数字

数字整形和浮点类型均有范围

Math.pow(2,1)=>2
Math.round(.6)=>1
Math.ceil(.6)=>1          向上求整
Math.floor(.6)=>0         向下求整
Math.abs(-5)=>5           求决定值
Math.min ,Math.max
Math.random()[0,1)
Math.aqrt(3)              平方根

Math.PI                   圆周率
Math.E                    自然对数的底数

上溢(Infinity/-Infinity)和下溢(0/-0)

NaN:0/0,无穷大/无穷大,给负数开平方根,不是数字

NaN与本身不相等
isNaN():非数字、对象、字符串           true
isFinite():不是NaN、+/-Infinity      true

二、字符串

字符串由16位Unicode字符集表示,单个字符由是内码;不能表示为16Unicode字符的字符串有代理项对组成(eg:e.length=>2)

var s="hellow world"
s.charAt(0)=>"h"
s.substring(1,4)=>"ell"
s.slice(1,4)=>"ell'
s.slice(-3)=>"rld"
s.indexOf("l",3)
s.split(",")
s.replace("h","H")

RegExp(regular expression)可以接收字符串(eg:var pattern=/\d+/g  pattern.test(字符串) ),字符串也可以接收RegExp ( eg:text.search(pattern) /match)

三、Boolean

null/nil是关键字,typeof(null)=>"object"含义是非对象。

undefine是预定义的全局变量,在函数没有返回值或者实参没有提供的函数时会返回undefine

 

·全局 属性, 比如 undefined、 Infinity 和 NaN 
·全局 函数, 比如 isNaN()、 parseInt()( 见 3. 8. 2 节) 和 eval()( 见 4. 12 节) 
·构造 函数, 比如 Date()、 RegExp()、 String()、 Object() 和 Array()( 见 3. 8. 2 节) 
·全局 对象, 比如 Math 和 JSON
全局变量是全局对象的一个属性

包装类对象
问题:字符串既不是对象为什么有面向对象的写法?
    handiwang.substring("handiwang".indexof("h"),"handiwang.length")
字符串调用new String()方法创造一个临时对象,一旦引用结束就会销毁
    var s="handiwang"
    s.len=4
    var t=s.len =>undefine
显示创建包装对象
    var S=new String(s)==s =>true;
    var B=new Booleam(b)===b =>false;
    var n=new Number(n)==n =>true;

     数据类型的转换

    x+"" =>String(x  +x ||x-0 =>Number(x);  !!x =>Boolean(x);


toString(x)方法可以选择参数;x在2-36之间
  eg:
  var n = 17; binary_ string = n. toString( 2); // 转换 为 "10001"
  octal_ string = "0" + n. toString( 8); // 转换 为 "021"
  hex_ string = "0x" + n. toString( 16); // 转换 为 "0x11" 

引用数据类型的字符串方法 [1,2,{x:1}].toString() '1,2,[object Object]' /\d+/g.toString() '/\\d+/g' (function( x) { f( x); }).toString() 'function( x) { f( x); }' 在银行工作的代码 n.toFixed(5),一个浮点小数的小数点后的位数,超出小数点的的位数自动补齐,未超出部分四舍五入 n.toExponential(4),科学计数法,从最高位开始进行科学计数,四舍五入(有效位数比指定参数大一) n.toPrecision(4),有效位数比整数为小用科学计数,大于则用小数计数法,大于位数补零。
尽可能多的解析数字且不会报错,非数字只会NaN,parseInt可以传入两个参数,第二个为转换的进制数。 parseInt(
" 3 blind mice") // => 3 parseFloat(" 3. 14 meters") // => 3. 14 parseInt("- 12. 34") // => -12 parseInt(" 0xFF") // => 255 parseInt(" 0xff") // => 255 parseInt("- 0XFF") // => -255 parseFloat(". 1") // => 0. 1 parseInt(" 0. 1") // => 0 parseInt(". 1") // => NaN: 整数 不 能以"." 开始 parseFloat("$ 72. 47"); // => NaN: 数字 不 能以"$" 开始 parseInt("ff",16)

对象装换为原始值
toString()
({x:1,y:2}).toString() =>"[object object]"
[1,2,3].toString() =>"1,2,3"
(function(x){f(x);}).toString()=>'function(x){f(x);}'
/\d/g.toString() =>"/\\d+/g
new Date(2010,0,1).toString() =>
'Fri Jan 01 2010 00:00:00 GMT+0800 (中国标准时间)'
valueOf()
new Date( 2010,0,1).valueOf()=>1262275200000

eg:[]==0
Number(
[].toString() )=>0


 

posted @ 2022-03-28 23:10  肥瘦皆宜  阅读(258)  评论(0编辑  收藏  举报