//typeof bar==="object"潜在危险
var bar=null;
console.log((bar !== null)&&(bar === 'object'));
//判断是否是回文
function huiwen(str){
str=str.replace(/\W/g,'').toLowerCase();
return (str==str.split('').reverse().join(''));
}
console.log(huiwen(" levvdfsdfel "));
var a={},b={key:'b'},c={key:'c'};a[b]=123;a[c]=456;
console.log(a);
//一个变量不是全局变量,并每次访问+1
function demo(){
var a=1;
return function (){
console.log(a++);
}
}
var fun=demo();
var c=fun();
fun();
fun();
function Counter(start){
var count=start;
return {
increment:function(){
count++;
},
get:function(){
return count;
}
}
}
var foo=Counter(4);
foo.increment();
foo.get();//5
foo.increment();
var a=foo.get();//6
var abc = (function(){ //abc为外部匿名函数的返回值
var a = 1;
return function(){
a++;
//alert(a);
}
})();
console.log(abc()); //2 ;调用一次abc函数,其实是调用里面内部函数的返回值
abc(); //3
var arr=[1,2,3,4];//创建一个二维数组
//[[1],[2],[3],[4]]
// function er(arr){
// var newArr=[];
// for (var i = 0; i < arr.length; i++) {
// newArr.push(arr[i]);
// for (var j = 0; j < arr.length; j++) {
// newArr[i][j]=i;
// }
// }
// return newArr;
// }
// console.log(er(arr))
var myarr=new Array();
for(var i=0;i<4;i++){
myarr[i]=new Array();
for(var j=0;j<4;j++){
myarr[i][j]=j+1;
}
}
console.log(myarr)
// 1,1,2,3,5,8,13
//求地n个数
function fibonacci(n) {
return n < 2? n : fibonacci(n - 2) + fibonacci(n - 1);
}
for(var i=1; i<=15; i++)
{
console.log(fibonacci(i));
}
//写一段代码找出最大的数
function maxNumber(a,b,c){
var max;
if(a>b){
max=a;
if(a<c){
max=c;
}
}else{
max=b;
if(b<c){
max=c;
}
}
return max;
}
console.log(maxNumber(1,2,3))
console.log(maxNumber(9,8,7))
console.log(maxNumber(6,7,5))
var str="abcdsfg";//写两种方法截取字符串cd
var res=str.substr(2,2);
var res1=str.substring(2,4);
var res3=str.slice(2,4);
//三者都不会改变原字符串
console.log(res3)
//消除数组重复项,并从小到大排序
var arr=[1,3,2,4,2,22,1];
function unique(arr){
var newarr=[];
for (var i = 0; i < arr.length; i++) {
if(newarr.indexOf(arr[i])===-1){
newarr.push(arr[i]);
}
}
return newarr;
}
function compare(a,b){
if(a<b){
return -1;
}else if(a>b){
return 1;
}else{
return 0;
}
}
var newarr=unique(arr);
console.log(newarr.sort(compare))
//字符串原型上扩展一个myReset方法,实现目标字符串倒置
String.prototype.myReset=function(){
return this.split("").reverse().join("");
}
'abc'.myReset();
//1秒之后输出3次3
for (var i = 0; i < 3; i++) {
setTimeout(function(){
console.log(i);
},1000);
}
//箭头函数的this
//箭头函数的特点
//1.不绑定this,arguments 用...代替arguments
// let arrowfunc = (...theArgs) => console.log(theArgs.length)
// arrowfunc(1,2)
// //output
// 2
//2.更简化的代码语法
var name="window";
var object={
name:"object",
getNameFunc:function(){
console.log(this.name) //object
return ()=>console.log(this.name) //object
// return function(){
// console.log(this.name) //window
// }
}
}
object.getNameFunc()();
const Person = {
'name': 'little bear',
'age': 18,
'sayHello': () => {
setTimeout(() => {
console.log('我叫' + this.Person + '我今年' + this.age + '岁!')
}, 1000)
}
}
//我叫undefined我今年undefined岁!
Person.sayHello();//通过以上的错误可以提醒我们,最好不要用箭头函数作为对象的方法。
// function Person () {
// this.name = 'little bear',
// this.age = 18
// setTimeout(() => {
// console.log('我叫' + this.name + '我今年' + this.age + '岁')
// },1000)
// }
//什么时候不使用箭头函数
// 1.作为对象的方法
// 2.不能作为构造函数
// 3.不能定义原型方法
function Person1 (name){
this.name = name;
}
Person1.prototype.sayHello1=()=>{
console.log(this)
}
var p1 = new Person1('lisi');
p1.sayHello1()
//output
// window对象
//箭头函数由于其代码的简洁性和不绑定this的特点,在非方法函数中使用是最合适的,而在方法函数中使用,需要特别注意它的this绑定问题,如果需要动态的修改this,最好还是不要使用箭头函数了。所以永远没有一个解决方案能解决所有事情,只有合适的应用场景。
//编写一个方法mySum,当调用mySum(1,2)跟mySum(1)(2)都返回3
function mySum(x,r){
if(arguments.length == 1){
return function(y) { return x + y; };
}else{
return x+r;
}
}
//console.log(mySum(2,3))
console.log(mySum(2)(3)(3));
//变量的提升
console.log(ppx);
var ppx="x";
function f1(){
console.log(ppx);
var ppx="y";
function ppx1(){console.log(ppx)};
console.log(ppx);
ppx1();
}
f1()