脱坑日记之js基础(ECMA262)
前言
虽然我是一个还没入门的小菜鸟,但我想做一个好前端。
写这个就是为了更好得学习更快得成长,早点脱坑,emmmm。
大致就是每篇解决一个我正在学习内容中问题,梳理知识点。
由于水平有限,难免有误,欢迎指正。
本期问题
实现一个函数,判断输入是不是回文字符串。
分析
- 用函数 function+if语句
- 判断是否是字符串 运用运算符 typeof
- 判断是否回文 用string方法和对象方法 ,先用split方法拆开字符串,再用对象方法reverse颠倒顺序,最后再用对象方法join把字符串整合
知识点
一、变量类型和计算
值类型和引用类型
- ECMAScript中有5中简单数据类型,Undefined,Null,Boolean,Number和String,还有一种复杂类型Object。
- 值类型存储在栈(stack)中,是简单的数据段,和变量重叠(变量在栈中仅仅是一个保存值的占位符),也就是说在变量被访问的位置。
- 引用类型被存储在堆(heap)中,堆是内存中的动态区域,相当于自留空间,在程序运行期间会动态分配给代码和堆栈。
- 值类型相等时每次都是创建一个新的数据段,引用类型相等时指向的是同一个数据块。
var a={name:"小明"}
var b=a
b.name="小红"
console.log(a.name) //小红
复制代码
typeof运算符
typeof undefined //undefined
typeof 'abc' //string
typeof 1 // number
typeof false //boolean
typeof null //object
typeof {} //object
typeof [] //object
typeof console.log //object
复制代码
- 从上面的代码可以发现,type只能详细区分值类型,而不能详细区分引用类型。
- 而null也是值类型,但从逻辑的角度看这是一个空对象指针。
变量计算中==和===
100='100'//true
0=''//true
null=undefined//true
复制代码
== 是不严格相等,===是严格等于。双等会出现隐式的类型转换,所以一定要慎用。仅仅当出现下面情况时可以使用
if(obj.a==null){
此时的obj.a==null 相当于 obj.a ===null||obj.a===undefined的简写形式
}
复制代码
二、split、join、reverse
join
- 定义:join() 方法用于把数组中的所有元素放入一个字符串。 元素通过指定的分隔符进行分隔。
- 可选参数1,用来制定分隔符。如果省略该参数,则使用逗号作为分隔符。
var arr=["M","a","r","c","u","s"]
arr.join("--")//M--a--r--c--u--s
复制代码
split
- 定义:split() 方法用于把一个字符串分割成字符串数组。
- 必须参数1,字符串或正则表达式,从该参数指定的地方分割。 可选参数2,该参数可指定返回的数组的最大长度。如果设置了该参数,返回的子串不会多于这个参数指定的数组。如果没有设置该参数,整个字符串都会被分割,不考虑它的长度。
var str="How are you doing today?"
document.write(str.split(" ") + "<br />")//How,are,you,doing,today?
//如果把空字符串 ("") 用作 separator,那么 stringObject 中的每个字符之间都会被分割。
document.write(str.split("") + "<br />")//H,o,w, ,a,r,e, ,y,o,u, ,d,o,i,n,g, ,t,o,d,a,y,?
//如果把空字符串 (" ") 用作 separator,那么 stringObject 会被拆成单词。
document.write(str.split(" ",3))//How,are,you
复制代码
reverse
- 定义:reverse用于颠倒数组中的顺序
var a=["1","2","3"]
a.reverse()// ["3", "2", "1"]
复制代码
- 该方法会改变原来的数组,而不会创建新的数组。
答案
function run (input){
if(typeof input!==="string"){
return false
}
else{
if (input.split('').reverse().join('')===input){
return true
}
}
}
复制代码
if语句就一句话的时候可以省略方法体,另外else同理,结果直接用return返回结果。
function run(input) {
if (typeof input !== 'string') return false;
return input.split('').reverse().join('') === input;
}
复制代码