Robot moves and counts its steps (or better said the rotation of its wheels), it tends to drift with longer distances. Can be made robuster by fusing information from an IMU (acceleration plus rotation speed) Needs an exact position initialization, especially the rotation angle.
Using a known map, the robot compares what it observed using its lidar and tries to fit it to the map, the result is a probabilistic state estimation that tends to converge as the robot moves. It needs an expensive lidar. Can be done with a kinect though. Needs a rough position initialization most of the times.
Purely visual methods:
Observe environment with a camera and find features that belong to one specific position. Not very scalable and needs a lot of computing power. Most of the time not very accurate positioning, but can be used as position initialization for other algorithms.
There is also plenty of other methods that require an additional infrastructure like installing bluetooth beans all over the building, or using Wifi routers if they are already there. Many companies also offer solution with magnetic wires installed under the floor that robots can detect. RFID tags are also another cheap solution but not so accurate. Another classical approach is using AR markers combined with a monocular camera, a cheap localization system with a high accuracy.