1,认识js,基础认识一

JavaScript的组成

  • Dom:文档对象模型,也就是节点,包括css树和标签树
  • Bom:浏览器对象模型说的就是浏览器;其中有,window对象,navigator对象,location对象,screen对象,performance对象…其实都是globall全局对象下的,浏览器称其为window,
  • ECMAScript:js的核心,也就是我们常说的es,包括语法,对象,类型…

认识script标签

  • 一般我们都会把script标签放在body标签后执行,因为dom是桉顺序执行的,所以如果放在最前边,浏览器加载解析时会先解析script标签后在渲染dom结构,而且js代码运行会比html标签慢很多,所以就会出现白屏现象。
  • script标签中有异步加载方法(但这种方法是加载其他文件时使用的)async这个属性就可以解决上面问题,是异步加载方法,还有defer属性,当文档解析后才会执行
  • 还有一些其他属性:
  • charset:指定src代码字符集,
  • crossorigin:配置相关请求头
  • ;integrity:加密签名验证
  • ;src:资源路径;
  • type:类型;
  • 还有一种动态加载script
let script =document.createElement('script')
script.src='jsl.js'
script.async=true
script.defer=false
document.head.appendChild(script)
  • 验证浏览器是否支持js的标签;如果不支持或者被关闭js的会显示noscript中的内容

语言基础

  • es的中的语言是区分大小写a和A是两个不同的字符
  • 严格模式:“use strict”
  • 关键字和保留字;es中关键字和保留字是不能用作变量名的

变量

  • 声明变量的关键字:var let const
  • 其中let和const是es6新提出的概念;let和const的出现弥补啦var的缺陷;因为var声明变量时会提高变量;而且没有作用域,很难控制
//这里说一下提高变量
console.log(a)   // 报错

---------分割线
console.log(a)  // undefind
var a
  • let和const声明不会提高变量,而且有作用域块;{}就是他们的作用域块

数据类型

  • js有引用数据类型和基础数据类型
  • 基础数据类型:string,number,boolearn,null,undefind,symbol
  • 引用数据类型:object。array,function
  • Number

转化number的方法:Number()强制转化为数字类型,如果不能被转化则会为nan,
parseInt();会转化为整数,如果有其他不是数字类型会被忽视;parseInt(123.11qwww)会被转化为123;还可以转化进制;如果传两个参数则第二个参数为进制;
parseFloat();会转化为浮点数,但是他始终会忽视第二个点后的parseFloat(0123.11.01bb) // 123.11
Number()可以转化空字符串为0而parseInt()则转化为nan

  • Number的隐式转化

-:在数值前调用-操作法,会调用Number()将其转换
<和>:< 或 >的任意一方只要出现数字类型就会把另一方通过Number()转换
==:同上一样,只要有一边出现数字类型就会转换

  • / %:处理非数字时都会调用Number()

number的方法 (调用都是num.方法)
toString()传入进制数,会对应转换为进制
toFixed()传的数字表示小数点后的位数
toExponential()返回科学计数法
toPrecision()会根据情况返回结果,就是根据情况决定调用toFixed还是toExponential;
Numbe.isInteger()是否为安全整数;1.00为安全,1.001不是

console.log(Number.isInteger(1));    // true
console.log(Number.isInteger(1.));   //true
console.log(Number.isInteger(1.000000));  //true
console.log(Number.isInteger(1.01));  //true
  • String的强制和隐式转化

toString();转化为字符串
隐式转换:当+前面是是字符串时会转换+后为字符

String的方法
charAt()返回指定索引字符串
charCodeAt():返回指定索引位置的的码原值
codePointAt():识别指定马点
String,fromCharCode():可以接受多个值,返回所有数值对应的字符串拼接在一起
Sting.fromCodePoint():同上也可以接受多个码点

let hh2=String.fromCharCode(98,55357,56842,100)
let hh=String.fromCodePoint(98,128522,100)
console.log(hh); //b😊d
console.log(hh2===hh);   // true
console.log(hh.charCodeAt(1)); //55357
console.log(hh.codePointAt(1));//128522
console.log(hh.charAt(1));  // ?

String方法还有concat();拼接一个或多个字符串
字符串截取方法有三个
slice,substring,substr
这三种方法为正数时且只有一个参数时没什么区别,都是如果只有一个参数为字符的索引位置(包括索引)开始 一直截取到字符结束位置;
如果两个参数slice和substring第一个为字符索引(包括索引)位置开始;第二个为索引结束位置(不包括结束位置);而substr的第二个参数则表是数量,要截取的数量
如果仅有一个参数而且为负数那么这三个方法又不一样啦
slice和substr表示为字符长度减去负数的绝对值的索引位置;而substring如果为负数则返回整个字符串
如果第二个参数为负数他们又不一样
slice会把负数转化为长度加上负数的绝对值的位置;而substr则会返回空字符串;substring依然转化为0,会把最小的作为开始位置

  • 只要substr第一个参数是负数就会忽略第二参数
    substr(-1,2)=substr(-1)
  • substring无论是一个参数还是两个参数只要是负数就会转化为0,并且成为开始位置;
  • slice无论哪一个是负数都会遵守 长度减去负数的绝对值;看下面例子
   let st = '0123456'
    console.log(st.slice(2)); //23456
    console.log(st.substr(2)); //23456
    console.log(st.substring(2)); //23456
    console.log(st.slice(2, 6)); //2345
    console.log(st.substr(2, 6)); //23456 这里说明就算设置的长度超出范围也只会截取到最后
    console.log(st.substring(2, 6)); //2345
    // ============================
    console.log(st.slice(-4)); //3456
    console.log(st.substr(-4)); //3456
    console.log(st.substr(-8)); //0123456 如果负数的绝对值大于字符长度则返回整个字符
    console.log(st.substring(-4)); //0123456

    console.log(st.slice(1, -4)); //12
    console.log(st.substring(1, -4)); // 1
    console.log(st.substr(1, -4)); // ' '
    console.log(st.substr(-1, 4)); // 6
    console.log(st.substring(-1, 4)); // 0123
    console.log(st.slice(-1, 4)); // ''  ==slice(6,4)所以为空

String位置
indexOf():返回第一次匹配的索引;如果传第二个参数则第二个参数为开始搜索的索引位置
lastIndexOf():返回最后一次匹配索引位置;如果传入第二个参数则从第二索引位置开始往前搜索

 let a='hahali'
 console.log(a.indexOf('a',2));// 3
 console.log(a.lastIndexOf('a',2)); //1

startsWith和endWith,includes
这三个方法都会返回布尔值
startsWith是否以某个字符开始
endsWith是否以某个字符结束
includes是否含有某个字符
当传一个参数时没什么不同
startsWith和includes如果传第二参数则为从第二参数索引位置开始
endsWith则第二个参数为从头开始字符串的长度

  let f = 'foobarbaz'
    console.log(f.startsWith('foo')); //true
    console.log(f.endsWith('bar')); //false
    console.log(f.includes('bar')); // true

    console.log(f.includes('bar', 4)); //false
    console.log(f.startsWith('foo', 1)); //false
    console.log(f.endsWith('bar', 6)); //true
  • trim()去除前后空白
  • repeat()复制方法
  let k='hh'
  console.log(k.repeat(4).concat('  我笑啦')); //hhhhhhhh  我笑啦
  • padStart和padEnd填充字符串指定长度
let l="li"
console.log(l.padStart(4)); // ‘  li’
console.log(l.padEnd(4));   // ‘li  ’
console.log(l.padStart(4,"哈")); //哈哈li
console.log(l.padEnd(4,"哈")); //li哈哈

字符串转大小写
转大写toLocaleUpperCase(),toUpperCase()
转小写toLocaleLowerCase(),toLowerCase()

字符串搜索及替换
search()方法和正则方法差不多/ /;返回的是第一次找到的索引
**repalce()**正则表达式做匹配;第二个参数是替换的

let text='ab AC add'
console.log(text.search(/ac/i)); //3
text=text.replace(/ac/ig,'ac') 
console.log(text);//ab ac add

用法
正则用法

  • typeof可以检测数据类型,但是null比较特殊,他的数据类型为object
  • null==undefind //true

boolean

所有非空的字符串都为true
所有的非0数字都为true;
所有的object(除null)都为true
null为false;因为通过NUmber()为0
undefind为false;同上;以为Number转化后为0

  • Symbol

符号,他与其他类型不太一样,不能作为函数与new一起用;new Symbol() // 报错
通过Symbol.for创建全局符号;只有通过Symbol.for创建的全局符号才会被Symbol.keyFor()找到

let o=Symbol.for("ggg")
Symbol.keyFor(o)   // 'ggg'
-----------------------
let o=Symbol("ggg")
Symbol.keyFor(o)   // undefind
-----------------
Symbol.keyFor(123)   // 会跑出异常

符号也可以作为属性

let s1=Symbol(['foo']let o={
[s1]:val}
console.log(o)  //{Symbol(foo):val}
  • 检查对象中Symbol属性的值:Object.getOwnPeopertySymbols()
  • 返回带有Symbol属性的对象(只要带有Symbol就会返回整个对象):Object.getOwnPropertyDescriptors()
  • 只返回带有Symbol的key值:Reflect.ownKeys()
  • 可枚举属性Symbol.iteror, @@iterator也可以表示
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值